互斥锁只能从等待它的同一个线程中释放出来?

moo*_*ara 3 c# multithreading mutex

是否只能从等待该互斥锁的线程中释放互斥锁?如果是,为什么互斥体会像这样?那么为什么我们说互斥锁可以跨多个进程工作呢?什么是-mutex和unnamed-mutex?我真的很困惑这个问题!

如果我想在一个线程中等待mutex并从另一个线程发出信号,我该怎么办?

pax*_*blo 6

互斥信号量确实必须由获得它的同一个线程释放.这是他们工作的方式:单个线程获取资源上的锁,以便它可以操作它,然后,当它完成时,它释放该锁,以便其他线程可以锁定它.

"互斥"位的重点是具有锁的线程具有总功率 - 只有它可以释放该锁.这仍然允许互斥锁跨多个线程工作,因为它可以在其生命周期内由任何一个线程拥有.

命名互斥锁允许单个互斥锁也可以跨进程和线程工作.该名称用于允许单独的进程"连接"到已创建的互斥锁,然后可以使用该名称来控制跨所有连接进程的资源访问.

对于你想要的跨线程通信,你会看到像条件变量这样的东西,用于向线程发信号表明条件已经满足 - 我认为.Net中的等价物是Monitor,它的Wait和Pulse方法.