boost::condition_variable
От: enji  
Дата: 11.04.11 08:47
Оценка: 4 (1)
Здравствуйте

Читаю доку boost::thread и не пойму, почему condition_variable сделан именно так.

Хочется чего-то вроде обычного event, с примерно таким использованием:

event evl;

void thread1()
{
  // готовим какие-то данные
  ev1.raise();
}

void thread2()
{
  ev1.wait();
  // данные готовы
}


Однако с использованием condition_variable это превращается в:
bool ev1_var;
condition_variable ev1_cond;
mutex ev1_mut;

void thread1()
{
  // готовим какие-то данные
  ev1_var = true;
  ev1_cond.notify_one();
}

void thread2()
{
    unique_lock<mutex> lock(ev1_mut);
    while(!ev1_var)    
        ev1_cond.wait(lock);        
    // данные готовы

}


Как-то очень многословно получается... Зачем вообще такая "сложная" схема применения нужна? Или я чего-то не понимаю — наставьте на путь истинный

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.