天天看點

c語言 互斥鎖,線程池中的一個互斥鎖有關問題

線程池中的一個互斥鎖問題

12: static void*

13: thread_routine(void *arg)

14: {

15:     tpool_work_t *work;

16:

17:     while(1) {

18:         

19:         pthread_mutex_lock(&tpool->queue_lock);

20:         while(!tpool->queue_head && !tpool->shutdown) {

21:             pthread_cond_wait(&tpool->queue_ready, &tpool->queue_lock);

22:         }

23:         if (tpool->shutdown) {

24:             pthread_mutex_unlock(&tpool->queue_lock);

25:             pthread_exit(NULL);

26:         }

27:         work = tpool->queue_head;

28:         tpool->queue_head = tpool->queue_head->next;

29:         pthread_mutex_unlock(&tpool->queue_lock);

30:         //這裡如果其他線程先獲得鎖,然後運作之後改變了work的值,而後下面這行代碼再運作,會調用新的值麼?

31:         work->routine(work->arg);

32:         free(work);

33:     }

34:

35:     return NULL;

36: }

這兒有個疑問。互斥鎖解鎖後,其他并行的線程如果此時獲得鎖并修改了work的值,那麼程式不是出問題了麼??

互斥鎖

分享到:

------解決方案--------------------

你的這個work是局部變量,既不是static,也不是const,外面怎麼能看見呢,然後你這樣是想試用隊列模型一邊插入一邊讀取,這樣有個壞處,對于鎖的争用是很明顯的,并發是上不去的,你可以試用多隊列模型,或者是雙緩沖多隊列模型,将兩個鎖分開,隻能幫到你這裡了