3

などを介して任意のキューでブロックを実行するdispatch_asyncと、GCD はブロック呼び出しの周りにスレッド フェンスを提供しますか? そうだと思いますが、ドキュメントには、私が知る限り、何らかのヒントはありません。

4

1 に答える 1

6

Cocoa-Dev メーリング リストの電子メール スレッドから、Greg Parker (Apple のランタイム エンジニアの 1 人)が私の質問に答えました

[S]GCD の使用がすべての頭に大災害をもたらしたわけではないので、dispatch_async() などはそのようなメモリ バリアを提供すると思います。同様に、NSOperationQueue、-performSelector:onThread:... なども必要です。そうですか?

一部の用途に十分なメモリバリアを提供しないマルチプロセッシングプリミティブは、その事実を大声で文書化することを期待しています。dispatch_once() のストレージは、バリアが欠落している文書化された例の 1 つです。OSAtomic 関数のいくつかは別の例です。しかし、それより重いものはほとんどすべて、クライアントに完全なメモリ バリアを提供する必要があります。

于 2015-04-25T12:42:35.630 に答える