[Ios] 同期ブロックとdispatch_async


Answers

そこにロックするだけで、2つの異なるブロックが一度にディスパッチされることを防ぎます。 しかし、それらは非同期的にディスパッチされるので、それらは実行されてもよいし、将来的には任意に実行されてもよい。 ディスパッチコールも完了するのを待つことはありません。

したがって、ブロック内のものは同期されません。 最小限の変更で達成するためのオプションは、同期ディスパッチか、ブロック内での同期のみです。

あなたが何をやっているかに応じて、シリアルディスパッチキューを確立し、それにブロックをディスパッチすることが最善の考え方です。

Question

ブロック内でdispatch_async()を呼び出すと、@synchronized()を使ってIOSのロックがどうなりますか?

例:

    id myID
-(void) foobar
{
    @synchronized(myID){
        dispatch_async(){ //do stuff with myID};
    }
}

dispatch_async呼び出し内でロックは有効ですか? もっと重要なのは、dispatch_async()の中で別の@synchronized()コールを使用することに欠点があるかどうかです。






Links