boost::condition
От: Adriano  
Дата: 02.10.07 00:15
Оценка:
Обьясние, пожалуйста, логику работы объекта синхронизации boost::condition. Прочитал доки, которые предлагает boost, там описано только приминение. Так же обсуждают недостатки event и якобы аналог ему — condition. Не пойму зачем в него передавать Mutex или lock

        lock lk(monitor);
        while (buffered == circular_buf.size())
            buffer_not_full.wait(lk); ???????
Re: boost::condition
От: Awaken Украина  
Дата: 02.10.07 06:19
Оценка: 14 (3)
Здравствуйте, 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
Re[2]: boost::condition
От: ioni Россия  
Дата: 02.10.07 16:50
Оценка: 9 (3)
Здравствуйте, 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/
Re[2]: boost::condition
От: Adriano  
Дата: 03.10.07 18:01
Оценка:
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...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.