static bool ATOMIC_BOol_READ( volatile bool& var ){ return __sync_fetch_and_or(&var,0);}static voID ATOMIC_BOol_WRITE(volatile bool& var,bool newval ){ __sync_bool_compare_and_swap( &var,!newval,newval);}
请注意以下几点:
>我正在传递bool参考.合理?
>为了一蹴而就,我也宣称它不稳定.
>这些功能是静态的
更新:
我想问的基本问题是:
什么是原子性和记忆障碍之间的区别?如果线程A正在变量foo上执行原子内置,则线程B不能对变量foo执行任何 *** 作;因此创造了一个记忆障碍?
只有在完全理解上述陈述后,才应阅读答案的其余部分.
一个值得注意的事实是,现有的所有机器始终保证对特定大小的数据的访问是原子的.这来自基本概念,即存储器和系统总线中的数据以一定的粒度传输.在大多数机器中,布尔值应该绝对是原子的,因此:
bool ATOMIC_BOol_READ(volatile bool* b) { bool v = *b; __sync_synchronize(); // ensure value pushed to memory return v;}voID ATOMIC_BOol_WRITE(volatile bool* b,bool v) { __sync_synchronize(); // read will return fresh value *b = v;}
这可能就是为什么GCC不提供简单的加载/存储特殊原子 *** 作的原因:它们已经被认为是原子的.
总结以上是内存溢出为你收集整理的c – 这是以原子方式读取和写入bool的正确方法吗?全部内容,希望文章能够帮你解决c – 这是以原子方式读取和写入bool的正确方法吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)