Обьясние, пожалуйста, логику работы объекта синхронизации boost::condition. Прочитал доки, которые предлагает boost, там описано только приминение. Так же обсуждают недостатки event и якобы аналог ему — condition. Не пойму зачем в него передавать Mutex или lock
lock lk(monitor);
while (buffered == circular_buf.size())
buffer_not_full.wait(lk); ???????
Здравствуйте, Adriano, Вы писали:
A>Обьясние, пожалуйста, логику работы объекта синхронизации boost::condition. Прочитал доки, которые предлагает boost, там описано только приминение. >Так же обсуждают недостатки event и якобы аналог ему — condition. Не пойму зачем в него передавать Mutex или lock
boost::condition является прямым аналогом POSIX condition variable
она в одном вызове делает 3 действия:
-отпускает мьютекс
-засыпает в ожидании сигнала(события)
-при наступлении сигнала просыпается и залочивает мьютекс опять
это очень мощный примитив синхронизации, удобный при написании очередей "производитель-потребитель"
в случае Win32 эмулируется с помощью нескольких вызовов API
http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
Здравствуйте, Awaken, Вы писали:
A>Здравствуйте, Adriano, Вы писали:
A>>Обьясние, пожалуйста, логику работы объекта синхронизации boost::condition. Прочитал доки, которые предлагает boost, там описано только приминение. >Так же обсуждают недостатки event и якобы аналог ему — condition. Не пойму зачем в него передавать Mutex или lock
A>boost::condition является прямым аналогом POSIX condition variable
A>она в одном вызове делает 3 действия:
A>-отпускает мьютекс
A>-засыпает в ожидании сигнала(события)
A>-при наступлении сигнала просыпается и залочивает мьютекс опять
A>это очень мощный примитив синхронизации, удобный при написании очередей "производитель-потребитель"
A>в случае Win32 эмулируется с помощью нескольких вызовов API
A>http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
в Vista появились аналоги
http://msdn2.microsoft.com/en-us/library/ms682052.aspx
http://msdn.microsoft.com/msdnmag/issues/07/06/Concurrency/
A>boost::condition является прямым аналогом POSIX condition variable
A>она в одном вызове делает 3 действия:
A>-отпускает мьютекс
A>-засыпает в ожидании сигнала(события)
A>-при наступлении сигнала просыпается и залочивает мьютекс опять
A>это очень мощный примитив синхронизации, удобный при написании очередей "производитель-потребитель"
A>в случае Win32 эмулируется с помощью нескольких вызовов API
A>http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
Спасибо, прочитал статью, все стало понятно.
Не понятно только почему нет аналога event, ведь это самый "примитивный примитив" синхронизации.
Хотя когда я вспоминая примеры, то получается, что всегда используется связка mutex+event что то же самое что и mutex+condition variable...