【发布时间】:2015-07-04 15:01:55
【问题描述】:
所以我有一个类,其中有几个方法都使用锁定,以防止当有人使用我的类的实例并通过多个线程访问它时发生奇怪的事情:
public class SomeRandomClass
{
private object locker = new object();
public void MethodA()
{
lock (locker)
{
// Does something
MethodB();
}
}
public void MethodB()
{
lock (locker)
{
// Does something else
}
}
}
正如我们所见,MethodB() 会被 MethodA() 自动访问,但这不起作用,因为 MethodA() 当前已锁定了 locker 对象。
我想让MethodB() 可以公开访问,因此您可以在需要时手动调用它,但我不希望在MethodA() 做事时使用它(这就是我使用储物柜对象的原因)。
当然我不希望MethodA() 在MethodB() 做事的时候做事。我基本上只希望同时使用所有方法中的一种,但MethodA() 需要以某种方式访问MethodB() 而无需移除锁(以便它始终保持完全线程安全)。
我真的希望我想问的问题是可以理解的……如果对我的问题有任何疑问,请继续在下面发布。答案/解决方案也非常感谢!
解决方案可能非常简单,我只是没看到。
顺便说一句,上面应该是C#代码。
【问题讨论】:
-
我删除了java标签。
-
所以:欢迎来到 StackOverflow!我认为您的问题写得非常清楚和出色。我们不喜欢“谢谢”短语(它们只会分散注意力),所以我从你的问题中删除了这个短语。
-
@DrewPierce:对不起,我真的不明白你的问题。你介意在你可能是英文的评论中使用完整的单词吗?
-
我将在 Android 上使用我的麦克风,以便 Marcus 能够理解
-
您的代码应该按原样工作。看到这个帖子:stackoverflow.com/a/13017319/3495581
标签: c# multithreading thread-safety locking