Multithreading 线程安全可以被忽略吗?

Multithreading 线程安全可以被忽略吗?,multithreading,thread-safety,mutex,Multithreading,Thread Safety,Mutex,在线程主题上教育自己。到目前为止,如果程序不是线程安全的,并且发生并发读/写操作,那么很可能会导致意外的影响,这与我所收集到的情况相去甚远 然而,假设完美的准确性并不重要?假设您正在一个线程中轮询鼠标坐标,并且您的主线程在不锁定的情况下读取这些值。您可能无法获得完全准确的结果(新数据和旧数据的潜在混合),但如果轮询足够快,用户应该不会察觉到不准确。方法不是线程安全的重要吗?它会导致其他问题吗?如果鼠标坐标没有自动更新,则可能会得到无效的值 例如,如果表示x坐标的长值未按原子方式更新,则读取的值可

在线程主题上教育自己。到目前为止,如果程序不是线程安全的,并且发生并发读/写操作,那么很可能会导致意外的影响,这与我所收集到的情况相去甚远


然而,假设完美的准确性并不重要?假设您正在一个线程中轮询鼠标坐标,并且您的主线程在不锁定的情况下读取这些值。您可能无法获得完全准确的结果(新数据和旧数据的潜在混合),但如果轮询足够快,用户应该不会察觉到不准确。方法不是线程安全的重要吗?它会导致其他问题吗?

如果鼠标坐标没有自动更新,则可能会得到无效的值


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

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

轮询鼠标坐标是一个糟糕的例子,因为它太线性了,即很容易用单个线程完成。线程最适合用于从中受益的问题。