3 回答

TA貢獻(xiàn)1797條經(jīng)驗 獲得超4個贊
多線程的效果就是同一時間各個線程都在執(zhí)行。
加鎖不是給線程上鎖。
pthread_mutex_lock(&qlock);表示嘗試去把qlock上鎖,它會先判斷qlock是否已經(jīng)上鎖,如果已經(jīng)上鎖這個線程就會停在這一步直到其他線程把鎖解開。它才繼續(xù)運行。
所以代碼中要么是線程1先執(zhí)行完后執(zhí)行線程2,要么就是線程2先執(zhí)行,再執(zhí)行線程1.而線程3一開始就執(zhí)行了。
互斥量mutex是用來給多線程之間的貢獻(xiàn)資源上鎖的。也就是同一個時間只允許一個線程去訪問該資源(資源:比如對文件的寫操作)。
現(xiàn)在來回答樓主的問題:
不是只要在pthread_mutex_lock(&qlock)與pthread_mutex_unlock(&qlock)之間的代碼執(zhí)行,其他的都不能介入嗎?
其他的都不能介入,不是整個進(jìn)程只運行這一個線程,其他線程都停住了。
“不能介入“這個動作需要程序員自己設(shè)計來保證:好比前面提到的文件讀寫操作。為了防止多個線程同時對文件進(jìn)行寫入操作,這就需要把資源上鎖了。
如果只有線程1加鎖,那是不是這個鎖就沒有意義了呢?
這個理解可以有

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊
互斥鎖的概念是:當(dāng)獲取不到鎖時將線程睡眠,此時CPU可以調(diào)度其它線程,線程3沒有獲取這個鎖,所以和線程1/2沒有關(guān)聯(lián),和他們鎖不鎖沒有關(guān)系。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
線程1和線程2都是請求同一個鎖的所有權(quán),因為每次只能有一個獲取所有權(quán),所以線程1、2同時只能執(zhí)行一個,線程3不需要獲取鎖,當(dāng)給它分配了時間片之后就可以執(zhí)行了
添加回答
舉報