c – 内存排序问题

c – 内存排序问题,第1张

概述我正在尝试使用C 0x支持,有一个问题,我猜不应该在那里.或者我不明白主题或 gcc有错误. 我有以下代码,最初x和y相等.线程1始终先增加x,然后增加y.两者都是原子整数值,所以增量没有任何问题.线程2正在检查x是否小于y,如果是,则显示错误消息. 这段代码有时候会失败,但为什么?这里的问题可能是内存重新排序,但是所有原子 *** 作默认情况下都是一致的,我没有明确放松这些 *** 作.我在x86上编译这个代码 我正在尝试使用C 0x支持,有一个问题,我猜不应该在那里.或者我不明白主题或 gcc有错误.

我有以下代码,最初x和y相等.线程1始终先增加x,然后增加y.两者都是原子整数值,所以增量没有任何问题.线程2正在检查x是否小于y,如果是,则显示错误消息.

这段代码有时候会失败,但为什么?这里的问题可能是内存重新排序,但是所有原子 *** 作默认情况下都是一致的,我没有明确放松这些 *** 作.我在x86上编译这个代码,据我所知,应该不会有任何排序问题.你能解释一下问题吗?

#include <iostream>#include <atomic>#include <thread>std::atomic_int x;std::atomic_int y;voID f1(){    while (true)    {        ++x;        ++y;    }}voID f2(){    while (true)    {        if (x < y)        {            std::cout << "error" << std::endl;        }    }}int main(){    x = 0;    y = 0;    std::thread t1(f1);    std::thread t2(f2);    t1.join();    t2.join();}

结果可以看出here.

解决方法 问题可能在你的测试中:
if (x < y)

线程可以评估x,而不是随便评估y,直到很久以后.

总结

以上是内存溢出为你收集整理的c – 内存排序问题全部内容,希望文章能够帮你解决c – 内存排序问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1250064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存