Это psuedocode для синхронизации задач с использованием семафора.
Операция включает проверку безопасности между передачей данных.
Begin_Security_Check=create_semaphore(0);
Security_Check_Done=create_semaphore(0);
Task Security_Check
{
while(true)
{
wait_semaphore(Begin_Security_Check);
(*actions check data*)
signal_semaphore(Security_Check_Done);
}
}
Task Download_Data;
{
(*actions to download data from WAN to router buffer*)
signal_semaphore(Begin_Security_Check);
wait_semaphore(Security_Check_Done);
(*actions to download data from router buffer to LAN*)
}
В заметках я читаю:
s = create_semaphore (v);
Где v = 0 или 1
wait_semaphore (с);
Если s = 1, тогда установите s = 0 и разрешите выполнение вызывающей задачи, в противном случае приостановите вызывающую задачу.
signal_semaphore (s);
Если нет задачи, ожидающей семафор, при установке s = 1, в противном случае возобновите любую задачу, которая ожидает семафор s.
Но это означает, что wait_semaphore(Begin_Security_Check);
имеет значение 0, потому что Begin_Security_Check=create_semaphore(0);
, верно? Это значит, что оно должно приостановить вызывающую задачу?
Первые два определения имеют create_semaphore(0);
- это означает, что они оба одинаковы?
Я действительно запутался, может кто-нибудь, пожалуйста, пошагово объясните, как работает этот псевдокод?