Cosa c'è di sbagliato con questo codice? Ottengo un 'metodo di sincronizzazione dell'oggetto è stato chiamato da un blocco di codice non sincronizzato'. Ho trovato un risultato su google che diceva che avrei potuto rilasciare un mutex prima di bloccarlo, ma secondo la mia uscita questo non è il caso. Ecco il codice mutex senza l'altro codice in mezzo.Perché questo programma è in errore? `Il metodo di sincronizzazione dell'oggetto è stato chiamato da un blocco di codice non sincronizzato`
-editare- scusate ragazzi, pasta sbagliata.
La mia uscita
1W
1W
2W
codice
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");
}
}
}
}
Dove si verifica l'errore? – itowlson
O linea 37 o 49. Quelli sono dove entrambi i thread sono nel mio debugger. –
Il tuo codice ha solo 36 linee. – dtb