這是互斥鎖的經典示例。我不知道爲什麼下面的代碼不起作用,即。它不會每次都打印「ctr = 0」(但是,例如,ctr = 535)。兩個線程,第一個添加第二個替代品
int ctr;
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
void * add (void * arg_wsk)
{
int i;
for (i = 0; i < 100000; i++) {
pthread_mutex_lock (&m);
ctr++;
pthread_mutex_unlock (&m);
}
return(NULL);
}
void * sub(void * arg_wsk)
{
int i;
for (i = 0; i < 100000; i++) {
pthread_mutex_lock (&m);
ctr--;
pthread_mutex_unlock (&m);
}
return(NULL);
}
int main()
{
pthread_t tid1, tid2;
int i;
void *res;
ctr = 0;
pthread_mutex_init(&m, NULL);
pthread_create(&tid1, NULL, add, NULL);
pthread_detach(tid1);
pthread_create(&tid2, NULL, sub, NULL);
pthread_detach(tid2);
pthread_join(tid1, &res);
pthread_join(tid2, &res);
pthread_mutex_destroy(&m);
printf("ctr = %d", ctr);
pthread_exit(NULL);
}
你能指點我正確的方向嗎?
此外,stackoverflow告訴我提供一些更多的細節,我的問題主要是代碼。但是我真的不知道在這裏寫什麼,我只是希望當我有更多的聲望時這條消息會消失。
未能檢查任何pthread庫返回值意味着您可能忽略了一個重要的錯誤。 – kmarsh