gpt4 book ai didi

c# - 如何在线程之间传递锁?

转载 作者:行者123 更新时间:2023-11-30 18:49:15 25 4
gpt4 key购买 nike

我愿意

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.Enter 的对象上 Monitor.Exit。怎么做?我应该使用线程间通信吗?

最佳答案

How to transfer locks between threads?

您在初始线程(例如线程 Alpha)上进入监视器。任何其他试图进入监视器的线程都将阻塞,直到监视器可用为止。

如果您随后想将锁转移到另一个线程,比如线程 Bravo,同时仍然能够在 Bravo 完成后恢复线程 Alpha 并拥有监视器的所有权,那么您将 Alpha 放在一个监视器上的等待状态。如果 Bravo 线程在监视器上被阻塞,那么它会被唤醒并进入监视器。当它完成时,它会脉冲监视器,它放弃 Bravo 对监视器的所有权并将所有权转移回 Alpha,Alpha 醒来并继续运行它对监视器的所有权。

如果您完全不清楚,那么 (1) 您一开始就不应该尝试这样做;如果你弄错了,这是非常危险的,并且 (2) 你应该阅读这篇文章:

http://www.codeproject.com/Articles/28785/Thread-synchronization-Wait-and-Pulse-demystified

关于c# - 如何在线程之间传递锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com