我正在研究一個男女皆宜的浴室問題的模擬,並且我在實現這個概念時遇到了麻煩。我已經看到了一些針對該問題的示例代碼解決方案,但它們都太複雜而且過於複雜,以至於我無法理解。我想實現一個模擬,其中main()在循環中創建一系列線程,其中每個線程調用兩個函數:enterBathroom()和leaveBathroom()。通過使用由互斥鎖鎖定和解鎖的全局變量來跟蹤一切,我將如何去實現這兩個函數?我將如何實施一個鎖定系統來模擬不同性別的浴室?
這裏是我到目前爲止的我的代碼的結構/框架:
//Global Variables
int maleCount, femaleCount, totalCount;
pthread_mutex_t bathroomLock;
EnterBathroom(int ID, bool isMale){
//if(isMale)
//lock, increment maleCount or totalCount?, unlock
//else
//lock, increment femaleCount or totalCount?, unlock
}
LeaveBathroom(int ID, bool isMale){
//Lock, decrement one of the variables?, unlock
}
我不知道我是否需要使用一個更互斥鎖或變量來保持當前的性別軌道的浴室或不是,或者我是否需要另一個整數來跟蹤浴室中佔有者的總數。我知道在每個函數中只是一系列的「if」語句,但我喜歡一個白癡,我刪除了我以前的實施嘗試,當它不起作用沒有備份時...
任何幫助都會不勝感激,無論是代碼還是隻是朝正確的方向推動。謝謝!
(只是爲了澄清,衛生間可以是男性或女性,在任何給定的點,但不能同時和無限數量的任何一個性別可以使用衛生間一次)
(也,全局變量在呼叫進入洗手間()並且離開浴室之前初始化)
感謝您的幫助!我知道我不能調用我的enterBathroom,並以我現在擁有的方式從pthread中離開浴室功能,但是我已經設置了這些函數,以便在線程函數本身內調用這些函數,當線程處於創建,但在線程中調用。這消除了你提到的問題不是嗎? – ahabos
是的。在這種情況下,不會有問題。我只給了抽象的設計。 – Jeyaram
我仍然不瞭解與進入浴室相關的各種情況。我知道這三種情況是: 1.浴室是空的 2.浴室是男性和新人是男性 3。浴室是男性和新的人是女性(我遺漏了2和3的相反,因爲它幾乎相同) 但我似乎無法包圍我的頭圍繞什麼變量增量以及如何鎖定這些變量如此環繞有互相排斥 – ahabos