można użyć Monitor
obiekt zyskać trochę w wydajności jak stwierdzono także w MSDN:
Chociaż mutex może być stosowany do wewnątrz proces synchronizacji wątku, przy użyciu monitora jest generalnie korzystne, ponieważ monitory zostały zaprojektowane specjalnie dla platformy .NET Framework, a tym samym lepsze wykorzystanie zasobów
aby uzyskać więcej informacji
http://msdn.microsoft.com/en-us/library/system.threading.monitor.aspx
Model CancellationToken
oferuje model do kooperatywnego anulowania asynchronicznych lub długotrwałych operacji synchronicznych. jeśli chcesz go użyć z klasą monitora, musisz ustrukturyzować kod, aby zwolnić blokadę, jeśli jest to żądanie anulowania. Można zrobić coś poniżej:
public void ThreadSafeMethod()
{
var cancellationToken=new CancellationToken();
object locker=new object();
Monitor.Enter(locker);
try
{
//your code
if (token.IsCancellationRequested)
{
Monitor.Exit(locker);
}
}
finally
{
Monitor.Exit(locker);
}
}
lub jeśli chcesz używać ThrowIfCancellationRequested:
public void ThreadSafeMethod()
{
var cancellationToken=new CancellationToken();
object locker=new object();
Monitor.Enter(locker);
try
{
//your code
cancellationToken.ThrowIfCancellationRequested();
}
catch(OperationCanceledException)
{
}
finally
{
Monitor.Exit(locker);
}
}
można zakładać jakiś kod pokazujący sekcji krytycznej i jak aktualnie uwalniający mutex? –