【问题标题】:Can thread safety ever be ignored?可以忽略线程安全吗?
【发布时间】:2014-02-05 00:00:08
【问题描述】:

自学线程主题。到目前为止,我无法收集到,如果程序不是线程安全的,并且发生并发读/写,很可能会导致意想不到的影响。

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

【问题讨论】:

  • 轮询鼠标坐标是一个不好的例子,因为它太线性了,即很容易用单线程完成。线程最适用于受益于divide and conquer approach 的问题。

标签: multithreading thread-safety mutex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    例如,如果表示 x 坐标的 long 值未自动更新,则您读取的值可能无效。

    【讨论】:

      猜你喜欢
      • 2014-01-08
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多