互斥量== 假如你有一张水卡,要放在卡槽才能出水,现在你和小明都要热水,于是你接一下热水(用自己的水卡),他又接一下热水,巧了,两人都接到泡面的热水。
互斥量是在Mutex的头文件中;
(并发的优点,可以极的减少时间,并且能够多个进程的运行东西;
(并发的缺点: 将代码复杂了。会消耗更多的系统资源。对于硬件的要求较高;
}
lock与unlock 的使用;上锁与解锁;
mutex mut;/// 给定一个对象;
对一个没有lock的对象进行unlock是未进行定义的结果;unlock的出现必须要有lock的锁定‘
对于死锁;的理解,你有一个扣,小明有一个扣,小明说你打开扣我才能打开,你又说你打开我才能打开;
计两个人多没办法进行打开;
mutex o;
mutex l;
l.lock();
cout << "woxinahbg " << endl;
o.lock();
for (int i = 0; i < 4; i++) {
cout << "wo yao kia shi jie suo le " << endl;
l.unlock();
}
o.unlock();
这样的编程代码是有bug的;
lock_guard()的用法;
每一次我们都要用lock = unlock 的这样的函数; 一旦忘记了解锁就会报错;那么救星来了;
lock_ground ;
理解lock_ground = lock +unlock 的用发;并自动进行解锁与枷锁;
lock_ground 的解开过程;至少在析构函数。
mutex mlock;//互斥量
// lock_guard<mutex> lg(mlock);
const char* g = " ia m vjsi n";
while (*g != '\0') {
mlock.lock();
cout << *g;
g++;
this_thread::sleep_for(chrono::seconds(1));
//seconds 是秒;
mlock.unlock();
}
lock_ground 的生存期是包括在我们 所写的unlock 与lock的范围;
关于unique_lock的详解;
一 : 我们常用lock_ground来进行替换unique_lock 。可以的,应为unique_lock 的内存大于lovk_ground效率也小于他;
两个函数;
mutex l;
std ::unique_lock <std::mutex >sbugir(l,std::try_lock );
尝试去拿锁;
常用if搭;
if(sbugir.try_lock()){
//拿到了;
}else {
//否者}