2017-04-22 151 views
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中實現相同?

+2

pthread_mutex_t需要在使用前進行初始化。 – ThingyWotsit

+0

是的,我將它初始化爲PTHREAD_MUTEX_INITIALIZER,現在輸出結果就是我所期望的。謝謝。 – gaurav

+0

@gaurav更新代碼的工作版本。 –

回答

2

pthread_mutex_t需要在使用前進行初始化。它必須開始解鎖和解除綁定。有一個調用,pthread_mutex_init(& theMutex)可以執行此操作,或者可以爲靜態init分配預定義的值:PTHREAD_MUTEX_INITIALIZER