我需要创建线程安全变量吗?

时间:2012-05-08 15:22:04

标签: ios multithreading

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

-(void) mainThread
{
 mydata = 55;
}

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

1 个答案:

答案 0 :(得分:3)

在这种情况下,我不认为有必要对mydata执行任何特殊操作,因为它只是从主线程更新(假设mainThread表示只调用该方法从主线程)。这也假设您不是尝试从主线程以外的任何地方读取mydata

进一步说明:

即使concurrentThread在主线程以外的线程上运行,mydata = 77出现在调度到主线程的块中的事实意味着赋值实际上将发生在主线程上,一些序列顺序以及主线程上发生的对该变量的任何其他读/写。所以假设在主线程上没有其他地方没有访问mydata的代码,这段代码是安全的。