我想使用两个队列,其中第一个队列将数据推送到队列,第二个线程将从队列中删除数据。 有人可以帮我解决在VC ++中实现这个问题吗?
我是线程和队列的新手。
答案 0 :(得分:2)
这是生产者/消费者的问题,这里是c ++中的一个implementation
答案 1 :(得分:1)
以下是一些指针和一些示例代码:
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;
}
我使用queue中的STL和来自threads库的condition variables,mutexes和Boost。提升中的内容几乎与standard C++ library in a few years so it is good to be familiar with it中的内容相同。
我只输入了代码,我无法测试它。你可能会发现错误。这是一件好事,线程代码很难,并且获得好处的最佳方法是大量练习。