化妆品设计网站,wordpress 添加商品,千锋教育前端培训,html网站开头怎么做一 前提 以及问题
我们注意到#xff0c;如果mutex.lock()两次#xff0c;就会有问题
如下的代码有runtime exception
mutex mymutex;mymutex.lock();mymutex.lock();//共享数据访问处理代码mymutex.unlock();mymutex.unlock(); 但是有这样的case存在 class Teacher183 …一 前提 以及问题
我们注意到如果mutex.lock()两次就会有问题
如下的代码有runtime exception
mutex mymutex;mymutex.lock();mymutex.lock();//共享数据访问处理代码mymutex.unlock();mymutex.unlock(); 但是有这样的case存在 class Teacher183 {
public:mutex mymutex;int num;int othernum;//1月份的时候有个需求我们写了个func1共享数据num的访问用mymutex保护void func1() {mymutex.lock();num;mymutex.unlock();}//3月份的时候公司有个新需求我们写了个func1共享数据othernum的访问用mymutex保护void func2() {mymutex.lock();othernum;mymutex.unlock();}//5月份的时候公司有了一个新需求这个需求有一部分代码用到了func1和func2那么我们按照习惯会这么写void func3() {mymutex.lock();//func3 代码func1();// func3 代码func2();mymutex.unlock();//func3 代码}};void main() {Teacher183 tea;thread functhread1(Teacher183::func1, tea);thread functhread2(Teacher183::func2, tea);thread functhread3(Teacher183::func3, tea);functhread1.join();functhread2.join();functhread3.join();
} 二。recursive_mutex--可以多次lock()写在一起多次unlock()写在一起 class Teacher183 {
public:recursive_mutex mymutex;int num;int othernum;//1月份的时候有个需求我们写了个func1共享数据num的访问用mymutex保护void func1() {mymutex.lock();num;mymutex.unlock();}//3月份的时候公司有个新需求我们写了个func1共享数据othernum的访问用mymutex保护void func2() {mymutex.lock();othernum;mymutex.unlock();}//5月份的时候公司有了一个新需求这个需求有一部分代码用到了func1和func2那么我们按照习惯会这么写void func3() {mymutex.lock();//func3 代码func1();// func3 代码func2();mymutex.unlock();//func3 代码}};void main() {Teacher183 tea;thread functhread1(Teacher183::func1, tea);thread functhread2(Teacher183::func2, tea);thread functhread3(Teacher183::func3, tea);functhread1.join();functhread2.join();functhread3.join();
}