首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >互斥锁只能从等待它的同一线程中释放吗?

互斥锁只能从等待它的同一线程中释放吗?
EN

Stack Overflow用户
提问于 2011-06-13 14:59:04
回答 4查看 6.2K关注 0票数 3

一个互斥锁真的只能从等待那个互斥锁的线程中释放吗?如果是,为什么互斥是这样的?那么为什么我们说一个互斥锁可以跨多个进程工作呢?什么是命名互斥锁和未命名互斥锁?我对这个问题真的很困惑!

如果我想在一个线程中等待互斥锁,并从另一个线程发信号给它,我应该怎么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-13 15:05:50

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

“互斥”位的全部意义在于,拥有锁的线程拥有总的能力--只有它才能释放锁。这仍然允许互斥锁跨多个线程工作,因为在其生命周期中,互斥锁可以归其中任何一个线程所有。

命名互斥锁允许单个互斥锁同时跨进程和线程工作。该名称用于允许单独的进程“连接”到已经创建的互斥锁,然后可以使用它来控制跨所有连接的进程对资源的访问。

对于您所期望的跨线程通信,您可以看到类似于条件变量的东西,它用于通知线程某个条件已经满足-我认为.Net中的等价物是监视器,它有Wait和Pulse方法。

票数 6
EN

Stack Overflow用户

发布于 2011-06-13 15:13:20

互斥锁拥有所有权-参见paxdiablo post。如果你想等待一个线程中的某个东西,并从另一个线程发出信号,那么不要使用互斥!Event- OK,condvar-OK,monitor-OK,semaphore-OK,Event - OK,mutex-not OK。

Rgds,Martin

票数 1
EN

Stack Overflow用户

发布于 2011-06-13 18:14:41

除了获取互斥锁的线程之外,不能从任何其他线程发出互斥锁(= Mut-ual Ex-clusion内核同步构造)的信号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6327436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档