1. ホーム
  2. objective-c

[解決済み] objective Cのシングルトンメソッドである@synchronized()は何をするのか?

2023-04-06 14:20:27

質問

シングルトン・メソッドを作成したのですが、このメソッドに含まれる関数 @synchronized() という関数が何をするのか知りたいのですが、よく使うので意味がわかりません。

どのように解決するのですか?

これは クリティカルセクション をコードブロックの周囲に宣言します。マルチスレッドコードでは @synchronized は、ブロック内のコードを実行できるのは常に1つのスレッドだけであることを保証しています。

もし、これが何をするものかを知らないのであれば、あなたのアプリケーションはおそらくマルチスレッドではなく、これを使う必要はないでしょう(特にシングルトン自体がスレッドセーフでない場合)。


編集します。 2011年からの元の回答になかったいくつかの情報を追加しました。

その @synchronized ディレクティブ で保護されているコードの領域に複数のスレッドが入ることを防ぎます。 @synchronized ディレクティブ 同じオブジェクトを参照する . に渡されたオブジェクトは @synchronized ディレクティブに渡されるオブジェクトは "lock." として使用されるオブジェクトです。異なるオブジェクトがロックとして使用される場合、2 つのスレッドはコードの同じ保護領域にいることができ、ロックとして同じオブジェクトを使用してコードの 2 つの完全に異なる領域を保護することもできます。

また、もしあなたがたまたま nil をロックオブジェクトとして渡した場合、ロックは全く行われません。