Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读/写同步器,获取锁的所有者_C#_Multithreading_Locking_Monitors - Fatal编程技术网

C# 读/写同步器,获取锁的所有者

C# 读/写同步器,获取锁的所有者,c#,multithreading,locking,monitors,C#,Multithreading,Locking,Monitors,也许这是一个简单的问题,但由于缺乏一些C#方面的知识,我很难找到解决方案 这里的交易,我必须实现一个信号量与5个方法,lockRead,lockWrite,releaseRead,releaseWrite和releaseLockWriter 前四个方法的名称是不言自明的,最后一个方法是释放writer锁并以原子方式获取read锁的方法 现在我的问题是,releaseRead、releaseWrite和releaseLockWriter只能由分别获得读锁或写锁的线程调用 如何知道线程是否是锁的所有

也许这是一个简单的问题,但由于缺乏一些C#方面的知识,我很难找到解决方案

这里的交易,我必须实现一个信号量与5个方法,lockRead,lockWrite,releaseRead,releaseWrite和releaseLockWriter

前四个方法的名称是不言自明的,最后一个方法是释放writer锁并以原子方式获取read锁的方法

现在我的问题是,releaseRead、releaseWrite和releaseLockWriter只能由分别获得读锁或写锁的线程调用


如何知道线程是否是锁的所有者?一个可能的解决方案是为每个线程创建id,并在获取锁时传递它们,然后在释放时再次传递id并检查id是否为所有者,但可能有更好的方法来完成此操作。

这是一个家庭作业吗?为什么不使用ReaderWriterLock等已有的同步机制呢?其目的是创建所有逻辑,以便更好地理解锁定机制。是的,这是一个家庭作业,但我不是要求任何人帮我解决它,我只是问是否有办法知道线程是否是锁的所有者,这样它就可以释放它。然后使用ReaderWriterLock的源代码作为提示。“如果有办法知道线程是否是锁的所有者,这样它就可以释放它”--我不知道.NET API中有任何东西会公开获取锁的线程。如果您正在编写自己的锁对象,那么您当然可以自己包含这样的机制。但是Stack Overflow不是一个“为我编写代码”的网站,对于以“有没有办法…”开头的问题,答案总是“是的”。只是“方法”有时在某些情况下比在其他情况下更难、更不可行。@PeterDuniho我不是要求任何人写我的代码,我只是问是否可能,如果可能,怎么做。我指的是如何解释可能的解决方案/算法,而不是为我编写任何代码。EZI说我应该看看ReaderWriterLock,这就是我正在做的。在那之前我在读这个。这是家庭作业吗?为什么不使用ReaderWriterLock等已有的同步机制呢?其目的是创建所有逻辑,以便更好地理解锁定机制。是的,这是一个家庭作业,但我不是要求任何人帮我解决它,我只是问是否有办法知道线程是否是锁的所有者,这样它就可以释放它。然后使用ReaderWriterLock的源代码作为提示。“如果有办法知道线程是否是锁的所有者,这样它就可以释放它”--我不知道.NET API中有任何东西会公开获取锁的线程。如果您正在编写自己的锁对象,那么您当然可以自己包含这样的机制。但是Stack Overflow不是一个“为我编写代码”的网站,对于以“有没有办法…”开头的问题,答案总是“是的”。只是“方法”有时在某些情况下比在其他情况下更难、更不可行。@PeterDuniho我不是要求任何人写我的代码,我只是问是否可能,如果可能,怎么做。我指的是如何解释可能的解决方案/算法,而不是为我编写任何代码。EZI说我应该看看ReaderWriterLock,这就是我正在做的。在那之前我读过这篇文章。