condition_variable_any 如此的不靠谱
如下代码,请猜测, 输出的nRecv的值。
请注意,我先启动的testcallback_consumer。
#include <boost/thread.hpp>
#include <iostream>
#include <stdlib.h>
using namespace std;
boost::recursive_mutex g_mtx;
boost::condition_variable_any g_cnd;
bool g_bCOntinue = true;
void testcallback_product()
{
//模拟生产者1000次
for (int i = 0; i < 1000; i++)
{
//boost::this_thread::sleep(boost::posix_time::milliseconds(1));
boost::unique_lock<boost::recursive_mutex> lock (g_mtx);
g_cnd.notify_one();
}
g_bCOntinue = false;
}
// 首先启动该函数
void testcallback_consumer()
{
int nRec = 0;
bool bRet = false;
while( g_bCOntinue )
{
bRet = false;
boost::unique_lock<boost::recursive_mutex> lock (g_mtx);
while(!bRet)
{
bRet = g_cnd.timed_wait(lock, boost::posix_time::milliseconds(50));
if (bRet)
{
nRec++;
}
}
}
cout<<"nRecv == "<<nRec<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread hC(&testcallback_consumer);
boost::this_thread::sleep(boost::posix_time::milliseconds(10));
boost::thread hP(&testcallback_product);
hP.join();
hC.join();
system("pause");
return 0;
}相关推荐
condition_variable源码以及详细分析.docx
详细介绍了线程同步条件变量condition_variable的使用和它的源码,涉及到unique_lock, mutex, lock_guard, 虚假唤醒和惊群效应。
C++11 并发指南五(stdcondition_variable 详解).docx
C++11 并发指南五(stdcondition_variable 详解).docx
C++11中的mutex, lock, condition variable实现分析
C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。 std::mutex 先来看下std::mutex: 包增了一个pthread_mutex_t __m_,很简单,每个函数该干嘛干嘛。 C++ class mutex { pthread_mutex_t __m_; public: mutex() _NOEXCEPT {__m_ = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;} ~mutex();
C++11多线程条件变量详解[项目代码]
本文详细介绍了C++11标准中<condition_variable>头文件中的条件变量类std::condition_variable及其相关函数。文章首先概述了条件变量的基本概念,包括其构造函数、wait()、wait_for()、wait_until()等成员函数的使用方法,并通过示例代码展示了如何在实际编程中应用这些功能。此外,文章还介绍了std::condition_variable_any、std::cv_status枚举类型以及std::notify_all_at_thread_exit()辅助函数的使用场景和注意事项。通过本文,读者可以全面了解C++11多线程编程中条件变量的核心功能及其实现细节。
Java多线程中ReentrantLock与Condition详解
主要介绍了Java多线程中ReentrantLock与Condition详解,需要的朋友可以参考下


模式及实现
