如何在VC ++中使用线程和队列

时间:2009-03-10 07:09:12

标签: multithreading visual-c++

我想使用两个队列,其中第一个队列将数据推送到队列,第二个线程将从队列中删除数据。 有人可以帮我解决在VC ++中实现这个问题吗?

我是线程和队列的新手。

2 个答案:

答案 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 variablesmutexesBoost。提升中的内容几乎与standard C++ library in a few years so it is good to be familiar with it中的内容相同。

我只输入了代码,我无法测试它。你可能会发现错误。这是一件好事,线程代码很难,并且获得好处的最佳方法是大量练习。