1
私は2つのスレッドを作成し、forループから "count"をインクリメントする同じ関数を呼び出そうとしていました。しかし、このコードを実行するたびに、カウンタの値が異なります。私はグローバル変数 "count"をインクリメントするときにスレッド間の同期をとるためにmutexを使用しようとしますが、値は異なります。ミューテックスを使ったpthreadの同期
static int count;
pthread_mutex_t count_mutex;
void increment()
{
pthread_mutex_lock(&count_mutex);
count++;
pthread_mutex_unlock(&count_mutex);
}
void *myThreadFun1(void *var)
{
printf("Thread1\n");
for(int i=0; i< 10000;i++)
{
increment();
}
return;
}
int main()
{
pthread_t tid1;
pthread_t tid2;
pthread_create(&tid1, NULL, myThreadFun1, NULL);
// sleep(1);
pthread_create(&tid2, NULL, myThreadFun1, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
printf("\n%d",count);
exit(0);
}
私はスレッド間で寝ていない場合、出力は20000になることはありません。
私たちが使用できる "同期"キーワードがありますが、Cで同じことを達成する方法はありますか?
pthread_mutex_tには初期化が必要です。使用する前にpthread_mutex_tを初期化する必要があります。pthread_mutex_init(& theMutex)これを行うコールがあります。 – ThingyWotsit
はい、私はそれをPTHREAD_MUTEX_INITIALIZERに初期化しましたが、出力は私の期待通りです。ありがとう。 – gaurav
@ gauravコードの作業バージョンを更新します。 –