Что не так с этим кодом? Я получаю "Метод синхронизации объектов" вызывается из несинхронизированного блока кода ". Я нашел один результат в google, который сказал, что я могу освободить мьютекс перед блокировкой, но в соответствии с моим результатом это не так. Вот код мьютекса без другого кода между ними.
-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");
}
}
}
}