【发布时间】:2010-12-26 01:53:43
【问题描述】:
这段代码有什么问题?我得到一个“对象同步方法是从不同步的代码块中调用的”。我在谷歌上发现了一个结果,说我可能在锁定之前释放了一个互斥锁,但根据我的输出,情况并非如此。这是互斥代码,中间没有其他代码。
-edit- 抱歉各位,贴错了。
我的输出
1W
1W
2W
代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace sqliteTest
{
class Program
{
static volatile Mutex mut1 = new Mutex();
static volatile Mutex mut2 = new Mutex();
static void Main(string[] args)
{
mut1.WaitOne(); Console.WriteLine("1W");
Thread oThread = new Thread(new ThreadStart(fn2));
oThread.Start();
mut1.WaitOne(); Console.WriteLine("1W");
update(0);
}
static void fn2()
{
mut2.WaitOne(); Console.WriteLine("2W");
mut1.ReleaseMutex(); Console.WriteLine("1R");
mut2.WaitOne(); Console.WriteLine("2W");
update(1);
mut1.ReleaseMutex(); Console.WriteLine("1R");
}
static void update(int t)
{
mut2.ReleaseMutex(); Console.WriteLine("2R");
if (t == 0)
{
mut1.WaitOne();
Console.WriteLine("1W");
}
}
}
}
【问题讨论】:
-
第 37 行或第 49 行。这两个线程都在我的调试器中。
-
哎呀。 +1 dtb。在新粘贴的代码中,它发生在 23 和 30
标签: c# .net synchronization mutex