std :: mutex如何阻止线程修改?

问题描述 投票:0回答:3

[。lock()或.try_lock()时,互斥锁会锁定内存的哪一部分,它仅仅是函数还是整个程序都被锁定了?

c++ multithreading
3个回答
1
投票

除互斥锁外,其他均未锁定。其他所有内容将继续运行(直到尝试锁定已锁定的互斥体为止)。仅存在互斥锁,因此两个线程无法同时在互斥锁和互斥锁之间运行代码。


1
投票

互斥锁除了自身以外,实际上没有锁定任何东西。您可以将互斥锁视为只能从内部解锁的门。当门被锁定时,任何试图锁定互斥锁的线程都将坐在门旁,并等待门后面的当前线程将其解锁并让它们进入。当它们的门未锁定时,则调用[ C0]您可以进入,关闭和锁定门,现在,除非您解锁并允许它们进入,否则任何线程都无法越过门。


0
投票

不同观点:

lock并没有真正锁定任何东西。它所做的是,它waits取得了互斥量的[[ownership。互斥锁始终是仅由一个线程拥有或为availablem.lock()等待直到互斥体可用,然后以调用线程的名称获取它的所有权。

m.lock()

releases

互斥锁(即,放弃所有权,导致互斥锁再次可用。
热门问题
推荐问题
最新问题