Linux中 条件变量为什么要用互斥锁来保护?

Linux中 条件变量为什么要用互斥锁来保护?,第1张

你不管他是条件变量还是其他什么变量。只要理解,因为这个变量/资源是共享的,可能会有多个进程或线程去修改它,那么就必须为它添加一个锁,这个锁是每次只有一个进程/线程可以获取到的。

打个比方,

mutex是一个布尔型变量,表示这个资源变量(锁)的一个钥匙

为真的是时候表示这个钥匙当前是可以借,

反之为假的时候表示已经有线程在使用这个钥匙。

在Java里边就用关键字synchronized来指定一个代码块一次只有一个线程可以访问。

取钥匙这个函数/方法的算法就可以这么理解了:如果这个锁可借,那么返回真,表示可借;否则返回假表示不可借

public

synchronized

boolean

getmutex(){//取钥匙

if(mutex==true)//钥匙空闲可用

{

mutex=false//取钥匙就进行修改,证明这一次取钥匙已经发生

return

true//返回真,表示取钥匙成功

}

else

return

false//这个钥匙正在被使用,返回假表示去钥匙失败

}

就像一个公用电话亭,这就相当于规定了一次只允许一个人进门,你进去了就把门关上。门关着其他人就进不去了,只有你打完电话出来开门,释放这个锁,其他人才可以进去。

通过synchronized关键字将取钥匙跟进门两个动作放在在一起,绑在一块。

其中门就是条件变量,mutex就是这个门的互斥锁。

全局变量对多个同步运行的线程是共享的,考虑下这个场景,当多个线程同时读写这个全局变量的时候,是不是有意想不到的后果。

锁的意义就在于当前 *** 作是唯一的,这样才能确保数据的准确性,这样逻辑关系也很好把握了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8927790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存