Ong*_*ngy 5 c++ condition-variable c++11
我有一部分代码,其中一个线程调用如下内容:
cond->notify_all();
delete cond;
Run Code Online (Sandbox Code Playgroud)
和
std::condition_variable_any cond;
Run Code Online (Sandbox Code Playgroud)
Afaik,这应该可行,因为我应该被允许删除条件变量,一旦我通知所有等待它的线程,它们就不必从等待调用中恢复。
在 Windows 上,有时会因错误而崩溃:
mutex destroyed while busy
Run Code Online (Sandbox Code Playgroud)
打印到标准输出
在linux上,使用clang 3.5,这工作得很好,在Windows上,我使用Visual Studio 2013,使用v120 takeit,v120是默认的。
是我做错了什么,是我误解了标准,还是 M$ 在这里做错了什么?如果是这样,我该如何解决这个问题?
Microsoft 的实现std::condition_variable_any不符合标准。根据Visual Studio 14 CTP1 中的 C++14 STL 功能、修复和重大更改,此问题已在尚未发布的 VS14 中修复:
我们已经实现了 30.5.2 [thread.condition.condvarany]/5 指定的极其微妙的规则:
~condition_variable_any()要求:
*this.[上不得有任何线程被阻塞。 注意:即所有线程都已被通知;他们随后可能会阻塞在等待中指定的锁上。这放宽了通常的规则,通常的规则要求所有等待调用都在销毁之前发生。只有解除阻塞等待的通知必须在销毁之前发生。用户必须注意确保析构函数启动后没有线程等待*this,特别是当等待线程在循环中调用等待函数或使用wait、wait_for、 或wait_until采用谓词的重载时。-结束注](DevDiv#484720)。
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |