我想检查一些锁定行为,但是我不理解这个:
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Task.Factory.StartNew(() =>
{
MultithreadedMethod();
});
}
Thread.Sleep(2000);
Console.WriteLine(count);
}
static int count = 0;
private static readonly int sync = 5;
public static void MultithreadedMethod()
{
if (Monitor.TryEnter(sync))
{
count++;
Monitor.Exit(sync);
}
}
我认为这应该不起作用,因为我正在对整数值进行同步。首先装箱,然后拆箱,由于缺少同步块根(我知道这仅适用于引用类型),所以我应该会得到System.Threading.SynchronizationLockException异常。即使这在几次迭代中有效,它也不是真正的同步...考虑到增量操作的非原子性质...我将无法获得确定性结果...我意识到了这一点。
实际上,当我去掉那个Thread.Sleep并在任务上放一个Wait时,异常就出现了。
Task.Factory.StartNew(() =>
{
MultithreadedMethod();
}).Wait();
我认为在这里应该抛出一个异常:
Monitor.Exit(sync)
,但是谁来捕获它呢?更新1:已添加图片。