我想要
Monitor.Enter(this.StaticLock);
try
{
// Do something ...
ThreadPool.QueueUserWorkItem(state =>
{
try
{
// Do something else...
}
finally
{
Monitor.Exit(this.StaticLock);
}
});
}
catch (Exception)
{
Monitor.Exit(this.StaticLock);
throw;
}
但这是行不通的,因为它不能在当前线程中不是
Monitor.Exit
的对象上使用Monitor.Enter
。怎么做?我应该使用线程间通讯吗? 最佳答案
Semaphore
允许您将它们锁定在一个线程中,而将其解锁在另一个线程中。
但是这种行为对我来说非常可疑...您到底想实现什么?在实践中,几乎绝不应这样做。
static readonly Semaphore semaphore = new Semaphore(1, 1);
void Method1()
{
semaphore.WaitOne();
try
{
// Do something ...
new Thread(() =>
{
try
{
// Do something else...
}
finally
{
semaphore.Release();
}
}).Start();
}
catch (Exception)
{
semaphore.Release();
throw;
}
}
关于c# - 如何在线程之间转移锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9201848/