boost::threads ошибка в example
От: NoHate  
Дата: 22.02.08 06:09
Оценка: 1 (1)
Добрый день. Разбираюсь с boost::threads.

В папке boost\libs\thread\example лежит пример conditions.cpp.

Открыл, смотрю. Чувствую — что-то не то. Потом заметил.

В файлике примерно следующее:

class bounded_buffer : private boost::noncopyable
{...};

bounded_buffer buf(2);

void sender() {
    int n = 0;
    while (n < 100) {
        buf.send(n);
        std::cout << "sent: " << n << std::endl; // <-- Где синхронизация?
        ++n;
    }
    buf.send(-1);
}
void receiver() {
    int n;
    do {
        n = buf.receive();
        std::cout << "received: " << n << std::endl;  // <-- Где синхронизация?
    } while (n != -1); // -1 indicates end of buffer
}
int main(int, char*[])
{
    boost::thread thrd1(&sender);
    boost::thread thrd2(&receiver);
    thrd1.join();
    thrd2.join();
    return 0;
}


Решил проверить, скомпилировал. Результат подтвердил мои опасения:

received: 96
received: sent: 97 // <--
sent: 98
sent: 99
97 // <--
received: 98



И эти люди не разрешают мне ковырять в носу? (С)

Может я что не понимаю? Это же пример того, как правильно с потоками роботать!

Версия: boost 1.34.1
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.