Вопрос

Безопасно ли, чтобы 2 или более потоков вызывали SetEvent API Win32 для одного и того же обработчика событий, не защищенного критическим разделом?

Это было полезно?

Решение

Это безопасно, но помните, что если один поток устанавливает его, а другой поток устанавливает его одновременно, вы не получите два уведомления, только одно; так как 2-й изменил его с True на ... True. Если вы беспокоитесь об этом, используйте вместо этого семафоры.

Другие советы

Если у вас несколько потоков, ожидающих одного и того же события и выполняющих один и тот же код. <Ол>

  • Если ваш код не очищает событие до завершения его обработки, у вас фактически есть CS. Так как событие остается сигнальным до тех пор, пока оно не будет очищено (иначе не сбрасывается автоматически), наличие нескольких потоков сигнализирует, что ничего не делает, кроме вращения ЦП.
  • Если ваш код очищает его в начале обработки или событие автоматически установлено, то у вас будет несколько потоков, выполняющих одну и ту же функцию, что небезопасно, если эти потоки совместно используют что-либо.
  • нет ограничений на вызов SetEvent из нескольких потоков.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top