1
我正在嘗試創建2個線程並調用相同的函數,該函數從for循環中增加了一個計數器「count」。但是每次我運行這個代碼時,計數器的值都是不同的。我嘗試使用互斥體在線程之間進行同步,當它們增加全局靜態變量「count」但仍然值不同時。使用互斥鎖的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。
在java中有我們可以使用的「synchronized」關鍵字,但是如何在C中實現相同?
pthread_mutex_t需要在使用前進行初始化。 – ThingyWotsit
是的,我將它初始化爲PTHREAD_MUTEX_INITIALIZER,現在輸出結果就是我所期望的。謝謝。 – gaurav
@gaurav更新代碼的工作版本。 –