多執行緒的效果就是同一時間各個執行緒都在執行。
加鎖不是給執行緒上鎖。
pthread_mutex_lock(&qlock);表示嘗試去把qlock上鎖,它會先判斷qlock是否已經上鎖,如果已經上鎖這個執行緒就會停在這一步直到其他執行緒把鎖解開。它才繼續執行。
所以程式碼中要麼是執行緒1先執行完後執行執行緒2,要麼就是執行緒2先執行,再執行執行緒1.而執行緒3一開始就執行了。
互斥量mutex是用來給多執行緒之間的貢獻資源上鎖的。也就是同一個時間只允許一個執行緒去訪問該資源(資源:比如對檔案的寫操作)。
現在來回答樓主的問題:
不是隻要在pthread_mutex_lock(&qlock)與pthread_mutex_unlock(&qlock)之間的程式碼執行,其他的都不能介入嗎?
其他的都不能介入,不是整個程序只執行這一個執行緒,其他執行緒都停住了。
“不能介入“這個動作需要程式設計師自己設計來保證:好比前面提到的檔案讀寫操作。為了防止多個執行緒同時對檔案進行寫入操作,這就需要把資源上鎖了。
如果只有執行緒1加鎖,那是不是這個鎖就沒有意義了呢?
這個理解可以有
多執行緒的效果就是同一時間各個執行緒都在執行。
加鎖不是給執行緒上鎖。
pthread_mutex_lock(&qlock);表示嘗試去把qlock上鎖,它會先判斷qlock是否已經上鎖,如果已經上鎖這個執行緒就會停在這一步直到其他執行緒把鎖解開。它才繼續執行。
所以程式碼中要麼是執行緒1先執行完後執行執行緒2,要麼就是執行緒2先執行,再執行執行緒1.而執行緒3一開始就執行了。
互斥量mutex是用來給多執行緒之間的貢獻資源上鎖的。也就是同一個時間只允許一個執行緒去訪問該資源(資源:比如對檔案的寫操作)。
現在來回答樓主的問題:
不是隻要在pthread_mutex_lock(&qlock)與pthread_mutex_unlock(&qlock)之間的程式碼執行,其他的都不能介入嗎?
其他的都不能介入,不是整個程序只執行這一個執行緒,其他執行緒都停住了。
“不能介入“這個動作需要程式設計師自己設計來保證:好比前面提到的檔案讀寫操作。為了防止多個執行緒同時對檔案進行寫入操作,這就需要把資源上鎖了。
如果只有執行緒1加鎖,那是不是這個鎖就沒有意義了呢?
這個理解可以有