线程安全可以被忽略吗?

时间:2014-02-05 00:00:09

标签: multithreading thread-safety mutex

教育自己关于线程的话题。远非我能够收集到的,如果程序不是线程安全的,并且发生并发读/写,则可能会导致意外的影响。

但是,假设完美准确无关紧要?假设您在一个线程中轮询鼠标坐标,并且主线程读取这些值,而不进行锁定。您可能无法获得完全准确的结果(新旧数据的潜在组合),但如果轮询足够快,则用户无法察觉不准确。该方法不是线程安全的吗?它会引起任何其他问题吗?

2 个答案:

答案 0 :(得分:2)

你不知道结果是什么,也无法判断它是否真的接近预期值。假设鼠标的X位置以2个字节存储,但您的系统只能原子地写入一个字节。然后,如果实际值在背后从255变为256(0x00FF0x0100),则会有一个内部步骤,0x00FF -> 0x01FF -> 0x0100(或类似的),您可以在不知不觉中阅读。然后你会认为你的x值是511而不是256,这是一个显着的差异,而不仅仅是几个像素。

答案 1 :(得分:0)

如果未以原子方式更新鼠标坐标,则可能会获得可能无效的值。

例如,如果表示x坐标的长值未以原子方式更新,则读取的值可能无效。