如何使用std :: mutex在winapi上并行线程中std :: queue

时间:2015-06-18 20:56:46

标签: c++ multithreading winapi std mutex

我想在流中进行异步写入 在下面的代码中,函数streamingpush_stream通过使用CreateThread winapi函数在并行线程中运行。 std::lock_guard<std::mutex>应锁定queue随机访问权限。 但是这个代码实例存在一些问题。当queue弹出项目时,我会收到Microsoft Visual C++ Runtime Library错误__acrt_first_block == header

std::ofstream somestream;
std::queue<std::string> queue;
std::mutex mutexQueue;

void streaming() {
  while (true) {
    if (!queue.empty()) {
      std::lock_guard<std::mutex> lock(mutexQueue);

      while (!queue.empty()) {
          somestream << queue.front();
          queue.pop();
      }
    }
  }
}

void push_stream(std::string str) {
  std::lock_guard<std::mutex> lock(mutexQueue);
  queue.push(str);
}

如何进行这种异步写入?我已经尝试了concurrent_queue,但它没有删除线程安全的项目。

UPD

问题出在.dll.exe静态链接到RT。从.exe调用的push_stream.dll中实现的功能。 导致Debug Assertion Failed! Expression: _pFirstBlock == pHead

的原因

现在问题已修复。

0 个答案:

没有答案