我正在模拟男女皆宜的浴室问题,但我在实施这个概念时遇到了麻烦。我已经看到了一些解决该问题的示例代码,但它们都太复杂且过于复杂,我无法理解。
使用互斥体,我想实现一个模拟,其中 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() 和 leaveBathroom 之前被初始化)