即使对于一个简单的2线程通信示例,我也很难用C11原子和memory_fence风格来表示这一点,以获得正确的内存排序:volatile int flag, bucket;while什么是更好的C11风格的解决方案来同步这个所谓的反依赖?
(当然,我知道我应该避免这样的低级别编码,并使用可用的高级构造,但我想了解.)
有没有办法用栅栏来解释C11中非原子操作的行为?具体来说,我希望在某些字段必须是int的情况下使代码安全,以便与旧接口兼容,例如,这些接口可以将数据结构读写到文件中,或者将它们作为系统调用参数传递。我知道 go 当C11程序包含所谓的良性竞争时,所以我真的在寻找一个看似合理的编译器和体系结构可以对上面的代码做些什么,而不是关于数据竞争和未定义行为的一般警告。