一个使用mutex的错误用法,mutex是一个互斥原语,lock并不是锁住变量,只是让临界区的代码无法执行。mutex和变量并没有任何的联系。只有通过写正确的代码才能让mutex保护数据。(下面的代码mMutex并不能保护变量m)。
#include<mqueue.h>
#include<iostream>
#include<string.h>
#include<mutex>
#include<thread>
// #include<sys/msg.h>
using namespace std;
int m=0;
mutex mMutex;
int main(){
thread t1([](){
mMutex.lock();
for(int i=0;i<1000;++i){
m++;
}
mMutex.unlock();
});
thread t2([](){
for(int i=0;i<1000;++i){
m++;
}
});
t1.join();
t2.join();
cout<<m<<endl;
}