C++ では、lock_guard を使用することをお勧めします。これにより、オブジェクトが破棄されたときにミューテックスのロックが解除されることが保証されます。
Cで同じことを実装する方法はありますか? それとも、手動で実装する必要がありますか:
ロックミューテックス
グローバル変数で何かをする
ミューテックスのロックを解除
#include <stdio.h>
#include <threads.h>
long long x = 0;
mtx_t m;
static void do1() {
mtx_lock(&m);
for(int i = 0; i < 100; i++){
x = x +1;
}
mtx_unlock(&m);
}
static void do2() {
mtx_lock(&m);
x = x / 3;
mtx_unlock(&m);
}
int main(int argc, char *argv[])
{
mtx_init(&m, mtx_plain);
thrd_t thr1;
thrd_t thr2;
thrd_create(&thr1, do1, 0);
thrd_create(&thr2, do2, 0);
thrd_join(&thr2, 0);
thrd_join(&thr1, 0);
return 0;
}