打个比方,
mutex是一个布尔型变量,表示这个资源变量(锁)的一个钥匙。
为真的是时候表示这个钥匙当前是可以借,
反之为假的时候表示已经有线程在使用这个钥匙。
在Java里边就用关键字synchronized来指定一个代码块一次只有一个线程可以访问。
取钥匙这个函数/方法的算法就可以这么理解了:如果这个锁可借,那么返回真,表示可借;否则返回假表示不可借
public
synchronized
boolean
getmutex(){//取钥匙
if(mutex==true)//钥匙空闲可用
{
mutex=false//取钥匙就进行修改,证明这一次取钥匙已经发生
return
true//返回真,表示取钥匙成功
}
else
return
false//这个钥匙正在被使用,返回假表示去钥匙失败
}
就像一个公用电话亭,这就相当于规定了一次只允许一个人进门,你进去了就把门关上。门关着其他人就进不去了,只有你打完电话出来开门,释放这个锁,其他人才可以进去。
通过synchronized关键字将取钥匙跟进门两个动作放在在一起,绑在一块。
其中门就是条件变量,mutex就是这个门的互斥锁。
全局变量对多个同步运行的线程是共享的,考虑下这个场景,当多个线程同时读写这个全局变量的时候,是不是有意想不到的后果。锁的意义就在于当前 *** 作是唯一的,这样才能确保数据的准确性,这样逻辑关系也很好把握了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)