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

前端之家收集整理的这篇文章主要介绍了c – 写入/读取变量的2个线程的真正危险前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
同时读/写单个变量的真正危险是什么?

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

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

解决方法

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

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

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

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

原文链接:https://www.f2er.com/c/111230.html

猜你在找的C&C++相关文章