我的意思是,是否可以添加或减少信号量?我的例子如下:
semaphore secureTarget = 7;
semaphore allClearAlert = 0;
semaphore bellAlert = 0;
Archer:
start();
wait(secureTarget);
wait(allClearAlert);
fireAtTarget();
signal(secureTarget);
wait(secureTarget - 7);
signal(bellAlert);
end();
Boy:
start();
signal(allClearAlert);
wait(bellAlert);
end();
这看起来可以接受吗?如果有帮助,我想回答的最初问题是:
射箭俱乐部有七个目标。俱乐部的弓箭手必须参加比赛 确保目标。一旦弓箭手确保她的目标,她必须等待 直到她能够完成之前一直响彻这一切。曾经 弓箭手完成她的目标。最后一位射手完成任务 听起来很响亮,所有人都有完成的声音。只有这样 收集箭头冒险的小男孩是否安全? 当所有箭头都被收集后,男孩就会离开 对于弓箭手来说,线条和声音都是清晰的。
答案 0 :(得分:2)
信号量只能使用signal()和wait()方法递增,您无法按照描述明确更改变量。我无法明确地给出解决方案 - 看看你的历史,我认为我正在为同一个模块做同样的课程,我不想做抄袭,但你可能会发现Little Book of Semaphores很有用。
编辑:您不必只使用信号量。您可以使用其他类型的共享数据,只要您使用互斥信号量来控制对这些变量的并发访问。