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これは、メインスレッド以外のどこからも読み取ろうとしていないことも前提としています。

さらなる説明:

parallelThread がメイン スレッド以外のスレッドで実行されている場合でも、メイン スレッドにmydata = 77ディスパッチされるブロックに表示されるという事実は、割り当てが実際にはメイン スレッドで行われることを意味します。 /メインスレッドで発生するその変数に書き込みます。したがって、mydata にアクセスするメイン スレッド以外のどこにもコードがないと仮定すると、このコードは安全です。

于 2012-05-08T18:29:58.033 に答える