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
原创粉丝点击