spinlock

    6热度

    1回答

    已经通过Understanding the Linux kernel (Bovet & Cesati),阅读内核同步的章节指出,自旋锁获取代码归结为: 1: lock: btsl $0, slp jnc 3 2: testb $1, slp jne 2 jmp 1 3: 现在,我原本以为它似乎浪费有嵌套的循环,你可以实现类似: 1: lock:

    219热度

    6回答

    我认为两者都在做同样的工作,你如何决定使用哪一个进行同步?

    0热度

    2回答

    我无法在Win32 Apis中找到任何获取螺旋锁的函数。 是否有原因? 当我需要使用螺旋锁时,我该怎么办? 我知道有一个CriticalSectionAndSpinCount函数。 但这不是我想要的。 编辑: 我想同步将在内核空间和用户空间之间共享的内存。 - 内存将被映射。 当我访问数据结构时,我应该锁定它,锁定时间会很短。 数据结构(假设它是一个队列)管理事件句柄以相互交互。 我应该使用什么同

    6热度

    3回答

    是否存在相当于x86 PAUSE指令,该指令位于繁忙的等待循环中以提高PowerPC上的性能,特别是在SMT机器上的性能?

    4热度

    2回答

    我最近读部分5.5.2(自旋锁和原子上下文)LDDv3书: 避免睡在持有锁会更加困难;许多内核函数可以睡眠,并且这种行为并不总是记录得很好。将数据复制到用户空间或从用户空间复制数据是一个明显的例子:需要的用户空间页面可能需要在复制进行之前从磁盘交换,并且该操作显然需要休眠。几乎任何必须分配内存的操作都可以睡眠; kmalloc可以决定放弃处理器,并等待更多的内存变得可用,除非明确告知不要。睡觉可能

    3热度

    2回答

    我需要确保代码部分(在内核模式下)没有其他人可以修改/检查CR0寄存器。在单处理器系统上,我认为禁用中断是最好的。但在多处理器系统: 有一种代码部分(与自旋锁机构例如)期间禁用从所有的处理器的所有中断? 这是必要的吗?在多处理器系统上修改cr0寄存器时,我猜这个寄存器只能修改当前的CPU吗? - >所以只为当前CPU禁用中断就足够了? - >有没有办法从其他CPU(在同一系统上)检查/修改来自另一

    1热度

    1回答

    使用.NET反射,我发现自旋锁结构有很多情况下,它调用Thread.BeginCriticalRegion,并且不调用Thread.EndCriticalRegion。 例如,在公共职能SpinLock.Enter(REF布尔lockTaken)(.NET 4.0): // ... Thread.BeginCriticalRegion(); if (Interlocked.CompareExc

    2热度

    1回答

    任何人都可以解释在设备驱动程序中使用自旋锁的确切用法。 我很困惑,因为在许多中断处理程序中我看到了自旋锁。 螺旋锁正忙着等待。它可以使延迟其他中断.. 如有可能的列表中向下某些情况下对设备驱动程序中,我们可以使用自旋锁 我是新来这个领域。你的帮助为我提供了一些初步的提升。

    1热度

    3回答

    看起来,自旋锁不是很好,因为它们在等待(阻塞)时浪费CPU周期。 如果线程刚好在等待唤醒信号时进入休眠状态,那么在旋转时CPU周期不会丢失。 如果锁持有非常短的时间,也许使用自旋锁很好,那么它可能使用更少的时间?如果这是真的,为什么?

    1热度

    1回答

    我目前正在研究一个跨平台的任务调度器,但是我在等待信号量时遇到了sem_wait旋转的问题。在Windows上,我使用WaitForSingleObject,它在等待时产生线程,这正是我想要的。但sem_wait会导致线程旋转,这是无效率和不必要的。有没有办法让sem_wait产生线程而不是旋转? 感谢