信号量可以使用数字操作吗?

时间:2012-01-09 21:20:34

标签: operating-system semaphore

我的意思是,是否可以添加或减少信号量?我的例子如下:

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();

这看起来可以接受吗?如果有帮助,我想回答的最初问题是:

  

射箭俱乐部有七个目标。俱乐部的弓箭手必须参加比赛   确保目标。一旦弓箭手确保她的目标,她必须等待   直到她能够完成之前一直响彻这一切。曾经   弓箭手完成她的目标。最后一位射手完成任务   听起来很响亮,所有人都有完成的声音。只有这样   收集箭头冒险的小男孩是否安全?   当所有箭头都被收集后,男孩就会离开   对于弓箭手来说,线条和声音都是清晰的。

1 个答案:

答案 0 :(得分:2)

信号量只能使用signal()和wait()方法递增,您无法按照描述明确更改变量。我无法明确地给出解决方案 - 看看你的历史,我认为我正在为同一个模块做同样的课程,我不想做抄袭,但你可能会发现Little Book of Semaphores很有用。

编辑:您不必只使用信号量。您可以使用其他类型的共享数据,只要您使用互斥信号量来控制对这些变量的并发访问。