- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
SpinLock .Net 中的结构可用于管理多个线程对资源的访问。与普通锁不同,它使用忙等待,如果预期等待时间非常短(但消耗更多资源),则速度更快。
其他线程原语(例如 Monitor
和 lock(...){}
)始终获取锁(或永远等待获取锁)。但是 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/
我编写了一个简单的程序来测试 CLH 锁的吞吐量。我的代码与“多核编程的艺术”书中描述的一样。接下来,我对不断变化的线程数运行计数器 10 秒,并将 counter/10.0 定义为吞吐量。 我的问题
我一直想知道它们是什么:每次我听到它们时,类似 future 派飞轮的设备的图像都会在我的脑海中跳舞(滚动?)...... 它们是什么? 最佳答案 当您使用常规锁(互斥锁、临界区等)时,操作系统会将您
SpinLock .Net 中的结构可用于管理多个线程对资源的访问。与普通锁不同,它使用忙等待,如果预期等待时间非常短(但消耗更多资源),则速度更快。 其他线程原语(例如 Monitor 和 lock
我正在尝试使用 SpinLock,但即使是单线程控制台应用程序中的这个最基本的代码,当我调用SpinLock.Exit() 时也会引发以下异常 System.Threading.Synchroniza
信号量的当前实现是如何工作的?它使用自旋锁或信号吗? 如果使用信号,调度程序如何知道调用哪个? 还有它在用户空间是如何工作的?内核锁定推荐自旋锁,但用户空间不推荐。那么信号量在用户空间和内核空间的实现
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
这是一道面试题,面试过了。 如何在不使用mutex、semorphore、spinLock、futex的情况下实现线程同步? 给定 5 个线程,如何让其中的 4 个线程在同一点等待来自左侧线程的信号?
我最近从http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2下载了linux源代码。我在 linux-2.6.34.1\
考虑以下代码片段: #include DECLARE_TASKLET (test_tasklet, test_func, (unsigned long) &test_data); 从什么 ld 知道
我使用 linux-2.6.31.8 作为我的内核环境。现在我需要对内核中的票证自旋锁进行一些修改。但令我惊讶的是,ticket spinlock.h 文件根本不是由内核编译的。我通过添加一些非法的
我有一个设置,我需要锁定、读取一些数据、处理、写入一些数据,然后解锁。为此,我制作了一个锁定纹理为 layout(r32ui) coherent uniform uimage2D .临界区的数据也以类
我有一个在 24 核系统上生成的 linux 内核转储。大多数任务都停留在自旋锁上。有没有办法获得自旋锁的所有者? 最佳答案 自旋锁没有“所有者”的概念,互斥锁有。 所以实际上你想知道的是哪个进程持有
我正致力于在字符设备驱动程序中实现阻塞调用。我将 wait_queue_head_t 元素与 wait_queue_interruptible 和 wake_up_interruptible 调用结合
我在boost::smart_ptr中找到了以下自旋锁代码: bool try_lock() { return (__sync_lock_test_and_set(&v_, 1) == 0);
具有两个重载 operator() 函数的类从不同的线程调用。请参阅下面代码中的//注释。 优化器是否知道不要将 entryadd = mSpread * ENTRY_MULTIPLIER 移动到 l
Linux内核中的原始代码是: static inline void __raw_spin_lock_irq(raw_spinlock_t *lock) { local_irq_disable
我是一名优秀的程序员,十分优秀!