Могут ли семафоры использовать числовые операции? - PullRequest
0 голосов
/ 10 января 2012

Под этим я подразумеваю, допустимо ли добавлять или вычитать из семафоров?У меня есть следующий пример:

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 Ответ

2 голосов
/ 11 января 2012

Семафоры могут быть увеличены только с помощью методов signal () и wait (), вы не можете явно изменить переменную, как вы описываете. Я не могу дать точное решение - глядя на вашу историю, я думаю, что я делаю ту же курсовую работу для того же модуля, и я не хочу, чтобы было сделано для плагиата, но вы можете найти Маленькая книга семафоров полезно.

РЕДАКТИРОВАТЬ: вам не нужно просто использовать семафоры. Вы можете использовать другие типы общих данных, если вы используете семафор мьютекса для управления одновременным доступом к этим переменным.

...