Я пытался следовать фрагменту псевдокода, имеющему отношение к семафорам, и когда я перевел код на C #, я получаю ошибку в названии.
После некоторого исследования происходит ошибка, потому что я звоню cust_ready.ReleaseMutex()
без вызова cust_ready.WaitOne()
в том же потоке. Проблема в том, что это именно то, что делает псевдокод, поэтому я не уверен, как решить эту проблему? Вызывается
cust_ready.WaitOne()
, но в отдельном потоке ниже приведен псевдокод:
Thread1:
wait (mutex2);
enqueue (custnr);
сигнал (cust_ready);
сигнал (mutex2);
Thread2:
wait (cust_ready);
wait (mutex2);
dequeuel (b_cust);
сигнал (mutex2);
и это мой код C #:
Thread1:
mutex2.WaitOne ();
customerQueue.Enqueue (custnr);
cust_ready.ReleaseMutex ();
mutex2.ReleaseMutex ();
Thread2:
cust_ready.WaitOne ();
mutex2.WaitOne ();
var существует = customerQueue.TryDequeue (out var b_cust);
mutex2.ReleaseMutex ();