【发布时间】:2011-06-15 17:37:43
【问题描述】:
我有一个用于同步(锁定)的私有静态字段。现在我有两个不想同时执行的函数。所以我这样做了:
public class Synchronization
{
private static object _lock = new object();
public void MethodA()
{
lock (_lock)
{
Console.WriteLine("I shouldn't execute with MethodB");
}
}
public void MethodB()
{
lock (_lock)
{
Console.WriteLine("I shouldn't execute with MethodA");
}
}
}
我知道锁定一个对象会阻止单个函数的并行执行,但是如果我在同时运行的不同方法中使用相同的锁定对象,同样的工作吗?简单地说,任何其他线程都可以在另一个函数中获取已锁定对象的锁定吗?
【问题讨论】:
-
何不自己尝试一下呢?
-
另请注意,通过这种方式,您已经同步了该类的每个实例。如果您不希望这样,请删除锁定对象的“静态”部分。
-
@Andreas 我说的是理论和实践。验证 MT 代码也非常困难。所以你的建议很幼稚。
-
@Andreas “自己试一试”并没有提供关于如何验证他的断言的 OP 详细信息。如果 OP 难以弄清楚他正在做的事情的语义,那么您应该能够看到您的建议存在的明显问题。这是一个扔掉的评论。
-
@Andreas Sure:“互联网永远不会忘记”。留在这里的任何问题、答案和 cmets 应该对站点的其他用户有用,并且最好为搜索引擎提供很好的汁液。 OP 询问您如何实际跟进您的评论,即“我该如何测试这个?- Tux”
标签: c# multithreading synchronization locking