Вот несколько указателей и пример кода:
std::queue<int> data; // the queue
boost::mutex access; // a mutex for synchronising access to the queue
boost::condition cond; // a condition variable for communicating the queue state
bool empty()
{
return data.empty();
}
void thread1() // the consumer thread
{
while (true)
{
boost::mutex::scoped_lock lock(access);
cond.wait(lock, empty);
while (!empty())
{
int datum=data.top();
data.pop();
// do something with the data
}
}
}
void thread2() // the producer thread
{
while (true)
{
boost::mutex::scoped_lock lock(access);
data.push_back(1); // guaranteed random by a fair dice roll
cond.notify_one();
}
}
int main()
{
boost::thread t1(thread1);
boost::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
Я использовал очередь из STL и потоков , переменных условий и мьютексов из Boost библиотека. Усиление - это в значительной степени то, что будет в стандартной библиотеке C ++ через несколько лет , так что хорошо с ней ознакомиться .
Я только набрал код, у меня нет возможности проверить его. Вы, вероятно, найдете ошибки. Это хорошо, многопоточный код сложен, и лучший способ добиться этого - много практики.