我是新來的多線程,我極其困難地圍繞互斥排斥我。使用pthread_mutex_lock鎖定資源意味着什麼?
因此,這裏是原型的pthread_mutex_lock
int pthread_mutex_lock(pthread_mutex_t *mutex);
手冊頁說,The mutex object referenced by mutex shall be locked by calling pthread_mutex_lock().
我所有的理解首先是你使用互斥鎖鎖定的共享資源,以便只有一個線程可以隨時訪問它。爲了爭論,讓我們假設共享資源是一個全局變量,稱爲myVariable
。現在,如果我們想鎖定myVariable,我應該可以使用鎖定機制鎖定myVariable
,但鎖定mutex object
意味着什麼?我的意思是,如果我撥打pthread_mutex_lock(&someMutex)
,我是否鎖定了myVariable
或其他東西?
所有這一切都說,如果我想使用互斥,我不應該能夠做一些像pthread_mutex_lock(myVariable)
而不是做pthread_mutex_lock(&someMutex)
?
此外,這個someMutex
對象如何對應myVariable? someMutex
對象如何鎖定myVariable
的訪問權限?
P.S.假設我已經在其自己之前宣佈了someMutex
。
P.P.S.我有一種感覺,這個問題可能很廣泛,但是再一次,這不應該是因爲我問的是某些確實有特定答案的東西(如果我錯了,請糾正我)。
Mutex首先被描述爲像孩子們的遊戲,「Button Button,它的按鈕」。如果您有Button,則只允許「觸摸」「共享資源」......互斥鎖是Button,當您的pthread_mutex_lock()成功時,您將獲得它(按邏輯)。然後您可以「閱讀」或「修改」共享資源。完成後,您可以「解鎖」互斥鎖,從而使其可用於其他線程。注意:這是一個簡單/初學者/不完整的描述,但它應該讓你開始。 – TonyB
哦那麼在這種情況下,我可以說使用相同的互斥鎖來鎖定不同的變量嗎?說我可以調用pthread_mutex_lock(&someMutex)來鎖定myVariable和你的變量嗎?由於互斥體並不是特定於某個特定變量(或來自您所說的資源),我應該可以使用一個互斥體來處理我的程序中的所有內容嗎? – posixKing
例如,您可以使用一個互斥鎖來控制對所有全局變量的所有訪問......您必須考慮所有線程可能需要訪問由互斥鎖保護的共享資源的頻率......這是多少個設計決策您需要的互斥體以及它們將鎖定的內容。 – TonyB