AutoResetEvent, ManualResetEvent по сравнению с монитором

Благодаря Pydev, Вы можете интегрировать pylint в Eclipse IDE действительно легко и добираться, код сообщают каждый раз, когда Вы сохранили измененный файл.

15
задан Jeff LaFay 8 August 2011 в 20:23
поделиться

2 ответа

Если можете, используйте Monitor. Это похоже на CRITICAL_SECTION. AutoResetEvent / ManualResetEvent может иметь немного больше накладных расходов, поскольку они могут использоваться разными процессами, в то время как Monitor принадлежит одному процессу.

5
ответ дан 1 December 2019 в 02:46
поделиться

WaitHandles очень похожи на конструкции Wait / Pulse, но разница заключается в деталях: метод WaitHandles Set устанавливает сигнал, даже если ни один поток не ждет. Это означает, что если вы вызываете Set в потоке, а затем вызываете WaitOne в другом потоке с тем же дескриптором ожидания, второй поток будет продолжен. Wait и Pulse - разные вещи, Pulse сигнализирует только о потоке, который уже находится в очереди ожидания. Это означает, что если вы вызываете Pulse в потоке, а затем вызываете Wait в другом потоке для того же объекта, второй поток будет ждать вечно (тупик). Вы должны быть предельно осторожны при использовании Wait и Pulse, используйте его только в том случае, если знаете, что делаете, иначе вам может просто повезти ...

Чтобы создать поведение WaitHandle самостоятельно используя Monitor, Weather AutoReset или ManualReset, вы должны сделать гораздо больше, чем простая конструкция Wait / Pulse. Просто используйте инструменты, необходимые для выполнения задания :

Если вы не можете синхронизировать потоки с помощью простой блокировки или атомарных операций, подумайте об использовании WaitHandles. Если вы не можете синхронизировать потоки с WaitHandles, подумайте об использовании Wait и Pulse.

19
ответ дан 1 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: