-1
在有人问我采访的一个...信号灯队列如何保护与多线程
Wait(semaphore sem) {
DISABLE_INTS
sem.val--
if (sem.val < 0){
add thread to sem.L
block(thread)
}
ENABLE_INTS
以上是信号灯等待执行(从其他线程复制)。 当多个线程尝试入队时(当它们无法获得锁定时),如何保护队列sem.L?更新队列之前我们是否锁定?
对不起......我的问题是,当我们没有得到锁,我们尝试将调用过程添加到队列中。该队列如何同步。我们是否为该队列加锁? –
大卫已经解释过了。只有一个核心,禁止中断,不需要锁定,因为代码不会被中断,然后重新进入。我不明白David的答案,你需要一些计算机体系结构和操作系统内核功能的进一步知识。 –
@SureshChowta它与来自其他内核的访问同步,因为没有其他内核。它通过禁止中断与其他代码在同一内核上运行同步 - 禁止中断,不可能发生上下文切换,因为只有中断可触发非自愿的上下文切换。了解这一点需要了解如何在低级别管理并发性 - 而不是没有内核编码经验的典型程序员的知识。问一个不需要内核开发知识的人是一个不好的问题。 –