首页 文章
  • 9 votes
     answers
     views

    C 11是否保证发布栏和消费操作之间的内存排序?

    请考虑以下代码: struct payload { std::atomic< int > value; }; std::atomic< payload* > pointer( nullptr ); void thread_a() { payload* p = new payload(); p->value.store( 10, std::m...
  • 1 votes
     answers
     views

    易失性与内存栅栏

    下面的代码用于将工作分配给多个线程,将其唤醒,并等待它们完成 . 在这种情况下,“工作”包括“清理卷” . 这个操作究竟做了什么与这个问题无关 - 它只是有助于上下文 . 该代码是巨大的事务处理系统的一部分 . void bf_tree_cleaner::force_all() { for (int i = 0; i < vol_m::MAX_VOLS; i++) { ...
  • 5 votes
     answers
     views

    Intel 64和IA-32 |原子操作包括获取/释放语义

    根据英特尔64和IA-32架构软件开发人员手册,LOCK信号前缀“确保处理器在声明信号时独占使用任何共享内存” . 这可以是总线或缓存锁的形式 . 但是 - 这就是我问这个问题的原因 - 我不清楚,如果这个前缀也提供了任何内存屏障 . 我正在多处理器环境中使用NASM进行开发,并且需要使用可选的获取和/或发布语义来实现原子操作 . 那么,我是否需要使用MFENCE,SFENCE和LFENCE指令或...
  • 5 votes
     answers
     views

    锁定指令是否在弱有序访问之间提供了障碍?

    在x86上, lock 等前缀指令(如 lock cmpxchg )除了原子操作外还提供屏障语义:对于回写内存区域的正常内存访问,读取和写入不按 lock -前缀指令重新排序,按照8.2.2节英特尔SDM第3卷: 读取或写入不能使用I / O指令,锁定指令或序列化指令进行重新排序 . 本节仅适用于回写内存类型 . 在同一个列表中,您会发现一个例外情况,它指出没有订购弱排序的商店: 读取不会与...

热门问题