1

我需要创建线程安全变量吗?我将只在 mainThread 和 dispatch_async(dispatch_get_main_queue() 中使用 mydata。

-(void) mainThread
{
 mydata = 55;
}

-(void) concurrentThread
{
 dispatch_async(dispatch_get_main_queue(), ^
 {
  mydata = 77;                          
 });
}
4

1 回答 1

3

我认为mydata在这种情况下没有必要做任何特别的事情,因为它只从主线程更新(假设这mainThread意味着该方法只从主线程调用)。这也假设您没有尝试mydata从任何地方读取,而是从主线程读取。

进一步说明:

即使 concurrentThread 正在主线程以外的线程上运行,但mydata = 77出现在分派到主线程的块中的事实意味着分配实际上将在主线程上进行,以某种串行顺序以及任何其他读取/write 写入发生在主线程上的变量。因此,假设在访问 mydata 的主线程上没有其他任何代码,则此代码是安全的。

于 2012-05-08T18:29:58.033 回答