Как использовать потоки и очередь в VC ++ - PullRequest
3 голосов
/ 10 марта 2009

Я хочу использовать две очереди, в которых 1-я очередь отправит данные в очередь, а 2-й поток удалит данные из очереди. Может кто-нибудь помочь мне PLZ по реализации этого в VC ++?

Я новичок в потоках и очереди.

Ответы [ 2 ]

2 голосов
/ 10 марта 2009

Это проблема производителя / потребителя, вот одна реализация этого в c ++

1 голос
/ 10 марта 2009

Вот несколько указателей и пример кода:

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 ++ через несколько лет , так что хорошо с ней ознакомиться .

Я только набрал код, у меня нет возможности проверить его. Вы, вероятно, найдете ошибки. Это хорошо, многопоточный код сложен, и лучший способ добиться этого - много практики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...