加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 写入/读取变量的2个线程的真正危险

发布时间:2020-12-16 03:29:21 所属栏目:百科 来源:网络整理
导读:同时读/写单个变量的真正危险是什么? 如果我使用一个线程来写一个变量而另一个线程用来读取while循环中的变量,并且如果在写入时读取变量并且使用旧值没有危险,那么还有什么危险呢? 同时读/写是否会导致线程崩溃或者在发生精确的同时读/写时在低电平上发生
同时读/写单个变量的真正危险是什么?

如果我使用一个线程来写一个变量而另一个线程用来读取while循环中的变量,并且如果在写入时读取变量并且使用旧值没有危险,那么还有什么危险呢?

同时读/写是否会导致线程崩溃或者在发生精确的同时读/写时在低电平上发生什么?

解决方法

如果两个线程在没有适当同步的情况下访问变量,并且这些访问中至少有一个是写入,那么您将遇到数据争用和未定义的行为.

未定义的行为如何表现完全取决于实现.在大多数现代架构中,您不会从硬件中获得陷阱或异常或任何东西,它会读取内容或存储内容.问题是,它不一定会读或写你所期望的.

例如使用两个线程递增变量,您可以错过计数,如我在devx:http://www.devx.com/cplus/Article/42725的文章中所述

对于单个编写器和单个读取器,最常见的结果是读者看到过时的值,但如果更新需要多个循环,或者变量跨缓存行分割,您可能还会看到部分更新的值.然后发生什么取决于你用它做什么 – 如果它是一个指针,你得到一个部分更新的值,那么它可能不是一个有效的指针,并且不会指向你想要的东西,然后你可能由于解除引用无效指针值而导致任何类型的损坏或错误.如果错误的指针值恰好指向内存映射的I / O寄存器,这可能包括格式化硬盘或其他不良后果….

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读