C# 互斥锁只能从等待它的同一线程中释放?
是否只有等待互斥锁的线程才能释放互斥锁?如果是,为什么互斥锁的行为是这样的?那么为什么我们说互斥可以跨多个进程工作呢?什么是命名互斥和未命名互斥?我真的很困惑这个问题C# 互斥锁只能从等待它的同一线程中释放?,c#,multithreading,mutex,C#,Multithreading,Mutex,是否只有等待互斥锁的线程才能释放互斥锁?如果是,为什么互斥锁的行为是这样的?那么为什么我们说互斥可以跨多个进程工作呢?什么是命名互斥和未命名互斥?我真的很困惑这个问题 如果我想在一个线程中等待互斥并从另一个线程发出信号,我该怎么办?互斥信号必须由获得互斥信号的同一个线程释放。这就是它们的工作方式:单个线程获取资源上的锁,以便可以对其进行操作,然后在完成时释放该锁,以便其他线程可以对其进行锁定 “互斥”位的全部要点是,带有锁的线程具有总的能力-只有它才能释放该锁。这仍然允许互斥体跨多个线程工作,因
如果我想在一个线程中等待互斥并从另一个线程发出信号,我该怎么办?互斥信号必须由获得互斥信号的同一个线程释放。这就是它们的工作方式:单个线程获取资源上的锁,以便可以对其进行操作,然后在完成时释放该锁,以便其他线程可以对其进行锁定 “互斥”位的全部要点是,带有锁的线程具有总的能力-只有它才能释放该锁。这仍然允许互斥体跨多个线程工作,因为它可以在其生命周期中由其中任何一个线程拥有 命名互斥体允许单个互斥体跨进程和线程工作。该名称用于允许单独的进程“连接”到已创建的互斥体,然后可用于控制跨所有连接进程对资源的访问
对于您所希望的跨线程通信,您看到的是一个类似于条件变量的东西,它用于向线程发出条件已满足的信号-我认为.Net中的等价物是监视器及其等待和脉冲方法。互斥锁拥有所有权-请参阅paxdiablo post。如果您想在一个线程中等待某个线程并从另一个线程发出信号,请不要使用互斥锁!事件-正常,condvar正常,监视器正常,信号量正常,事件正常,互斥不正常 Rgds,
Martin简单的回答是,当释放互斥锁时(从拥有互斥锁的线程),将通知其他线程 i、 e.所有在互斥体上等待的线程将争夺互斥体的所有权,获胜者将从等待调用返回并继续执行互斥体的所有权 这就是使用互斥和自己协调信号的区别。 这回答了你的问题还是我误解了你 溴
Daniel除了获取互斥对象的线程外,您不能从任何其他线程发出互斥对象(Mut-ualEx-clusion内核同步构造)的信号。您是指
互斥对象类吗?必须清楚,因为互斥是一个通用概念,System.Threading.mutex
是其具体实例。文档提供了一个很好的用法描述,请参见:另请参见这个问题,以了解C#中关于条件变量的更多信息:“互斥”位的全部要点是,带有锁的线程具有总能力-只有它可以释放该锁。请参见“这要求一个线程获取的互斥可以被另一个线程释放。”你是说这篇文章的作者不称职吗@安德鲁,不是无能,只是在术语上松懈。如果您允许另一个线程解锁互斥锁,它将失去保护共享资源的能力。互斥的确切含义是:这个资源是我的,走开,在我用完它之前你不能拥有它。可能存在允许外部方代表您发布的同步原语,但我认为它们不应该称为互斥体,而应该称为mut