4

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;
}
4

1 に答える 1