boost递归锁recursive_mutex 测试
来源:互联网 发布:电视盒子软件 编辑:程序博客网 时间:2024/05/21 20:20
由于在递归函数里可能碰到对同一个资源锁的获取,所以需要使用递归锁,方便递归函数的执行
测试代码
//测试重入锁void test_recursive_mutex(){//定义递归互斥量boost::recursive_mutex rmutex;//递归调用函数1boost::function<void(int)> func1=[&func1,&rmutex](int cnt){std::cout<<"start func1"<<std::endl;//获取锁boost::recursive_mutex::scoped_lock lck(rmutex);std::cout<<"\t\tthread1 "<<cnt<<std::endl;//休眠boost::this_thread::sleep(boost::posix_time::milliseconds(500));//继续执行if(cnt<3){func1(++cnt);}};//执行函数1boost::thread t1(func1,0);//暂停以防止函数2抢占执行boost::this_thread::sleep(boost::posix_time::milliseconds(500));//递归调用函数2boost::function<void(int)> func2=[&func2,&rmutex](int cnt){std::cout<<"start func2"<<std::endl;//获取锁boost::recursive_mutex::scoped_lock lck(rmutex);std::cout<<"\t\tthread2 "<<cnt<<std::endl;//继续执行if(cnt<3){func2(++cnt);}};//执行函数2boost::thread t2(func2,0);//等待执行完毕t1.join();t2.join();}
输出结果如下:
start func1 thread1 0start func2start func1 thread1 1start func1 thread1 2start func1 thread1 3 thread2 0start func2 thread2 1start func2 thread2 2start func2 thread2 3
0 0
- boost递归锁recursive_mutex 测试
- boost::recursive_mutex::scoped_lock
- 【Boost】boost库中thread多线程详解4——谈谈recursive_mutex(递归式互斥量)
- 【Boost】boost库中thread多线程详解4——谈谈recursive_mutex(递归式互斥量)
- 【Boost】boost库中thread多线程详解4——谈谈recursive_mutex(递归式互斥量)
- boost::mutex vs boost::recursive_mutex
- boost::mutex vs boost::recursive_mutex
- boost::mutex vs boost::recursive_mutex
- Boost - 多线程-boost recursive_mutex用法
- Boost - 多线程-boost recursive_mutex用法
- boost::mutex vs boost::recursive_mutex
- boost::mutex vs boost::recursive_mutex
- 【原创】boost::recursive_mutex请小心使用
- boost的递归锁
- 【Boost】boost库中thread多线程详解4——谈谈recursive_mutex
- boost递归锁和非递归锁区别
- boost递归遍历文件夹
- boost递归遍历文件夹
- 国外优秀JavaScript资源推荐
- 了解 HTML 渲染
- unix/linux编程实践教程读后感(1)
- event模块底层各种事件机制
- 毕业季
- boost递归锁recursive_mutex 测试
- android 网络访问权限
- VS2005配置CPPUnit进行单元测试
- Oracle 11g RAC 检查各部分运行状态
- NGUI--UIRoot 屏幕分辨率自适应
- 如何使java中double类型不以科学计数法表示
- IO编程——文件输入输出
- Java的IO流中BufferedReader中readLine()方法的原理
- sqlite3用法详解草稿