Когда можно использовать переменную cond для синхронизации ее собственного уничтожения / отмены отображения?

Согласно POSIX,

должно быть безопасно уничтожить инициализированную переменную условия, при которой в настоящее время не заблокированы ни один поток.

Кроме того, операции сигнала и широковещательной передачи указываются для разблокировки одного / всех потоков, заблокированных в переменной условия.

Таким образом, мне кажется, что следующие формы самосинхронизированного уничтожения должны быть допустимы, т.е. вызов pthread_cond_destroy :

  1. Сразу после успешного сигнала, либо в ожидающем, либо в сигнальном потоке, когда на cond var заблокирован ровно один поток.
  2. Сразу после успешной широковещательной рассылки, в любом ожидающем или широковещательном потоке.

Конечно, это предполагает, что больше не прибудут ожидающие и никакие дальнейшие сигналы после этого не будут выполняться, за что отвечает приложение при использовании pthread_cond_destroy .

Правильно ли я, что разрушение допустимо в этих ситуациях? И существуют ли другие сценарии самосинхронизированного уничтожения, о которых следует знать с переменными состояния?

Наконец, для разделяемых процессами условных переменных, где отключение общего сопоставления без разрушения может иметь смысл, разумно ли ожидать, что отключение будет действительным в Уничтожение одних и тех же контекстов будет допустимым или должна быть выполнена дальнейшая синхронизация, если несколько потоков в одном процессе (адресном пространстве) используют одно и то же отображение и хотят отменить его отображение в одном из вышеуказанных контекстов?

6
задан R.. 29 September 2011 в 14:00
поделиться