C# 我应该使用哪个同步对象在一个线程中进行互斥访问,该线程的状态可以从另一个线程读取?

C# 我应该使用哪个同步对象在一个线程中进行互斥访问,该线程的状态可以从另一个线程读取?,c#,.net,multithreading,C#,.net,Multithreading,解释这一点的最佳方法是使用代码示例进行演示 我有一个工作线程,它执行一些互斥操作(可能需要几秒钟才能完成),我将这些操作封装在一个命名互斥对象中,例如: //Thread 1 using (Mutex mtx = new Mutex(false, strGlobalMutexName)) { if(mtx.WaitOne()) { //Do processing } } 我的问题是如何从另一个线程中找出mtx互斥体是在我的线程1中输入的(或获得的)?而

解释这一点的最佳方法是使用代码示例进行演示

我有一个工作线程,它执行一些互斥操作(可能需要几秒钟才能完成),我将这些操作封装在一个命名互斥对象中,例如:

//Thread 1
using (Mutex mtx = new Mutex(false, strGlobalMutexName))
{
    if(mtx.WaitOne())
    {
         //Do processing
    }
}

我的问题是如何从另一个线程中找出
mtx
互斥体是在我的
线程1
输入的(或获得的)?而且,如果不能使用互斥体,那么.NET中是否有其他同步原则允许使用互斥体?

在获取第一个互斥体后,请做一些适当的事情,让其他线程知道您获取了互斥体。在释放它之前,做一些适当的事情让其他线程知道你正在释放它。这可能意味着更改可变布尔值。这可能意味着设置一些受另一个互斥锁保护的变量。只需准确地编写您想要的代码。@DavidSchwartz:是的,我可以使用命名事件。我希望通过一个单一的同步对象来实现这一点。无法从另一个线程读取my
mtx
的状态,是吗?
Mutex
对于您的情况来说非常昂贵。如果您更改一个线程内的状态,只想从其他线程读取,您可以使用
ReaderWriterLockSlim
类。@哈姆雷特·哈科比恩:嗯,处理部分可能需要很多秒,所以我想通过放弃互斥节省的CPU周期不会有多大关系。我很好奇,我能使用
监视器.TryEnter(mtx)吗
为了我的目的?