-5
我已經想出了以下解決方案的男女同浴浴室同步。中性浴室同步
的問題有以下限制:
- 有一個共用浴室具有有限的容量。
- 男性和女性不能使用衛生間的同時
- 一個個體所能使用衛生間
- 花任意一段時間內的個人不喜歡等待使用的衛生間(減少等待時間)
- 的解決方案不應該偏向男性或女性。
有關該問題的詳細說明,請參閱link。
下面提到的解決方案是否滿足所有問題約束?
僞代碼
int female_cnt = 0;
mutex female_cnt_mutex;
int male_cnt = 0;
mutex male_cnt_mutex;
mutex female_mutex;
mutex male_mutex;
semaphore restroom = N;
female()
{
lock(female_mutex)
unlock(female_mutex)
lock(female_cnt_mutex)
female_cnt++;
if (female_cnt == 1)
lock(male_mutex)
unlock(female_cnt_mutex)
wait(restroom)
do_stuff();
signal(restroom)
lock(female_cnt_mutex)
female_cnt--;
if (female_cnt == 0)
unlock(male_mutex)
unlock(female_cnt_mutex)
}
male()
{
lock(male_mutex)
unlock(male_mutex)
lock(male_cnt_mutex)
male_cnt++;
if (male_cnt == 1)
lock(female_mutex)
unlock(male_cnt_mutex)
wait(restroom)
do_stuff();
signal(restroom)
lock(male_cnt_mutex)
male_cnt--;
if (male_cnt == 0)
unlock(female_mutex)
unlock(male_cnt_mutex)
}