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

c – 写入读取变量的2个线程的真正危险,第1张

概述同时读/写单个变量的真正危险是什么? 如果我使用一个线程来写一个变量而另一个线程用来读取while循环中的变量,并且如果在写入时读取变量并且使用旧值没有危险,那么还有什么危险呢? 同时读/写是否会导致线程崩溃或者在发生精确的同时读/写时在低电平上发生什么? 如果两个线程在没有适当同步的情况下访问变量,并且这些访问中至少有一个是写入,那么您将遇到数据争用和未定义的行为. 未定义的行为如何表现完全取决 同时读/写单个变量的真正危险是什么?

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

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

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

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

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

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

总结

以上是内存溢出为你收集整理的c – 写入/读取变量的2个线程的真正危险全部内容,希望文章能够帮你解决c – 写入/读取变量的2个线程的真正危险所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存