memory-barriers

    2热度

    1回答

    当我们从前面的问题知道:Does it make any sense instruction LFENCE in processors x86/x86_64? 那我们不能用SFENCE代替MFENCE的顺序一致性。并且,如果没有这些,我们不能提供顺序一致性,并且做了一些事情,并且mainaly MFENCE = SFENCE + LFENCE。 LFENCE使得不可能重新排序: SFENCE L

    13热度

    1回答

    英特尔内存模型保证: 店将不被重新排序,与其他百货 负载不会重新排序与其它负载 http://bartoszmilewski.com/2008/11/05/who-ordered-memory-fences-on-an-x86/ 我有由于英特尔存储器模型,但从来没有LFENCE认为SFENCE在x86-64上是冗余的。上述内存模型规则是否使指令冗余?

    4热度

    1回答

    我有一个执行自旋锁: class Spinlock { public: void Lock() { while (true) { if (!_lock.test_and_set(std::memory_order_acquire)) { return; } } } void Unlock() {

    3热度

    1回答

    任何人都可以解释为什么Linux内核的ext2的功能 int ext2_statfs (struct dentry * dentry, struct kstatfs * buf) 问题smp_rmb()和 else if (sbi->s_blocks_last != le32_to_cpu(es->s_blocks_count)) { 情况下smp_wmb()? 这是在上游内核提交2235219b

    0热度

    1回答

    我有64位,我需要在一个事件之前非常快速地读取,然后在事件之后执行比较和交换。 我想我可以在活动之前加载(std::memory_order_relaxed)以便快速阅读,然后在活动之后使用常规比较和交换。 当我比较非原子64位读,原子(放松)和原子(获取)之间的程序集时,我看不到在程序集中的任何区别。这是C++试验: int main(){ volatile uint64_t var2

    2热度

    2回答

    我见过一些关于Linux内存障碍的文档。它提到有读取内存屏障和写入内存屏障。我很容易理解写入内存屏障的含义,我没有看到读取内存屏障的必要性! 只是为了保持存储区的读取顺序?如果顺序相反,我认为价值仍然是正确的,不是吗? 因此,读取内存屏障:读取操作屏障读取操作或写入操作屏障读取操作? 它让我困惑!

    1热度

    1回答

    我的假设是,LockSupport.parkNanos(long)不会抛出InterruptedException,但标志可以线程上设置。 这是正确的吗? 如果是这样,我需要检查标志,并抛出InterruptedException? 使用范例: import java.util.concurrent.locks.LockSupport; public void parkNanosInterru

    0热度

    1回答

    变量有没有办法告诉JVM尽可能长时间地缓存线程变量,从不更新它们,除非使用内存屏障或volatile变量? (用于测试)

    2热度

    1回答

    x86指令lfence/sfence/mfence用于实现Linux内核中的rmb()/ wmb()/ mb()机制。很容易理解这些用于序列化内存访问。然而,在编写代码时确定何时何地使用这些代码更困难 - 在遇到运行时行为中的错误之前。 我很想知道是否有已知的警告,可以在编写/审查代码时检查,这可以帮助我们确定必须插入障碍的位置。我知道这太复杂了,但是有没有经验法则或清单可以帮助我们确定需要这些代

    8热度

    1回答

    在Linux内核自旋锁实现了瓷砖 - GX的架构,它看起来像锁定时,他们没有发出任何内存屏障(仅解锁时): https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h 然后我不明白为什么指令不能在锁定之上重新排序,这会导致程序员相信的指令在执行锁定时执行,在锁定执行之前实际执行? 其他架构似乎有