gpt4 book ai didi

c# - SpinLock.Enter 获取锁失败怎么办?

转载 作者:行者123 更新时间:2023-12-02 07:40:53 24 4
gpt4 key购买 nike

SpinLock .Net 中的结构可用于管理多个线程对资源的访问。与普通锁不同,它使用忙等待,如果预期等待时间非常短(但消耗更多资源),则速度更快。

其他线程原语(例如 Monitorlock(...){})始终获取锁(或永远等待获取锁)。但是 SpinLock.Enter 方法使用 ref bool 参数来指示获取锁是否失败。

需要什么 ref bool lockTaken 以及在什么情况下 Monitor.Enter 会失败(从而将 lockTaken 设置为 false ?)

最佳答案

使用此“lockTaken”模式是为了确保线程同步构造确实获取了锁。事情是 - Monitor 和 SpinLock 在 finally block 中内部退出,并在 try block 中获取锁。

现在,如果线程已进入 try block 并在获得锁定之前中止,则不应在 finally block 中释放它。这个问题是通过 ref bool 变量解决的。

Boolean taken = false;
try {
// An exception (such as ThreadAbortException) could occur here...
Monitor.Enter(this, ref taken);
}
finally {
if (taken) Monitor.Exit(this);
}

关于c# - SpinLock.Enter 获取锁失败怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165323/

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