我要检查一些锁定行为,我不明白这一点:锁定在一个基本类型
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,因为缺少同步块根(我知道这是特定于引用类型)。 我不会愚弄自己,即使这只是为了迭代而工作,它并不是真正的同步..所以,考虑到增量操作的非原子属性..我不会得到确定性的结果..我知道这个的。
事实上,当我摆脱那个Thead.Sleep,并把任务等待..异常到位。
Task.Factory.StartNew(() =>
{
MultithreadedMethod();
}).Wait();
我觉得异常应该在这里抛出:Monitor.Exit(sync)
但什么抓住了吗?
更新1:图片已添加。
当我运行上面的代码时,它会从'Exit'引发异常。当然你从任务中捕获异常? –
@PatrickHofman这就是我拥有的一切。刚拍了照片。 –