В предыдущем моем вопросе кто-то имел в виду, что использование семафоров в C # дорого обходится по сравнению с использованием монитора. Итак, я спрашиваю, как мне заменить семафор в этом коде на монитор?
Мне нужно, чтобы функция 1 возвращала свое значение после завершения функции 2 (в отдельном потоке). Я заменил Semaphore.WaitOne
на Monitor.Wait
и Semaphore.Release
на Monitor.PulseAll
, но PulseAll
запускался до того, как Wait
вызывал зависание программы. Есть идеи, как избежать этого состояния гонки?
Semaphore semaphore = new Semaphore(0,1);
byte b;
public byte Function1()
{
// new thread starting in Function2;
semaphore.WaitOne();
return b;
}
public void Function2()
{
// do some thing
b = 0;
semaphore.Release();
}