7、所以,讓我們更進一步,在產生隨機數的地方加一個互斥量。
11、函數pthread_cond_wait主要就是用於阻塞線程的,它有兩個參數;第一個是一個指向條件變量的指針,第二個是一個鎖定了的互斥量。
2、主線程:鎖定互斥量並增量threadcount。
6、這個例程做了一些新的工作;它鎖定一個叫做count _ mutex的互斥量。
12、這個壞程序的開發者起初的想法是好的,即只在真正需要使用之前才鎖定這些互斥量,但是他卻直到運行結束才解鎖。
4、現在,有兩個線程需要使用這兩個互斥量。
10、如果您將調用pthread_create前面改變threadcount值的代碼去掉,那麼互斥量代碼中間就只剩下減小計數值的語句了。
5、之後它創建一個新的線程同時增量threadcount;在完成之後,它解鎖互斥量。
1、另外,您還可以使用“遞歸”類型的互斥量,這種互斥量允許對同一個互斥量鎖定多次。
13、最後,當一個線程從調用pthread_cond_wait而被喚醒時,要做的第一件事就是重新鎖定它在最初調用時解鎖的那個互斥量。
3、當pthread_cond_wait被調用後,它解鎖互斥量並停止線程的執行。
9、像這樣的問題,一個簡單的解決辦法是保*以相同的順序獲得互斥量。
8、如果線程1要運行,它就要鎖定rand _ mutex,可是這個互斥量已經被線程2阻塞了。