【问题标题】:One thread changes BOOL to YES, another thread doesn't see change一个线程将 BOOL 更改为 YES,另一个线程看不到变化
【发布时间】:2010-09-20 09:02:46
【问题描述】:

我有一个属性声明如下:

@property(assign) BOOL die;

一个线程通过查看该变量是否已更改为 YES 来不断检查它是否应该死亡。当该模具设置为“是”时(通过用户单击按钮),正在磨掉的另一个线程仍将其视为“否”。我仔细跟踪了代码,发现变量肯定没有显示为已修改。这是怎么回事?

每个线程是否包含自己的变量缓存?在我的母语 Java 中,我会在其上设置“volatile”关键字以删除属性上的本地线程缓存。

这是你可以在 obj-c 中做的事情还是我走错了路?

【问题讨论】:

  • 尝试发布访问变量的代码。
  • 以及设置变量的位置。
  • 持续检查的方法可能会被等待或通知所取代,具体取决于您正在执行的操作。我们需要代码。
  • 此代码应该可以工作,因为默认情况下该属性是原子的。您访问它的方式有问题。
  • “@property (assign) volatile BOOL die;”怎么样!?

标签: iphone objective-c multithreading ipad thread-safety


【解决方案1】:

不同的线程可能正在检查不同的实例。确保两个线程都在访问该参数的同一个副本

【讨论】:

    【解决方案2】:

    使用通知中心可能会更好,以便在更改时通知侦听器。

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多