1

重複の可能性:
@synchronized() は何をしますか?

@synchronized実際に何ができるのか、私のアプリケーションには何が最適なのかについて質問があります。

NSMutableArrayバックグラウンド スレッドで変更し、フォアグラウンド スレッドでアクセスします。配列の内容を変更しているときに配列にアクセスすると、バックグラウンドの変更から更新された値を取得できる場合は、配列へのアクセスを少し保留したいと思います。NSLockただし、特にs とがどのように機能するかについては 100% 確信が持てません@synchronized

それが不可能な場合、配列のコピーを変更し、終了したら、アクセサー呼び出しをフリーズするために、コピーの内容を設定するときにプロパティ/インスタンス変数をロックすることは可能ですか?

基本的に、@synchronized(myArray) はアクセサー呼び出しをフリーズしますか (ロックが解放されるまで呼び出しをハングさせてから実行します)?

また、インスタンス変数またはプロパティを NSLock でロックすることは可能ですか? 私が見たところ、コードのブロックのみをロックしているようです。

4

1 に答える 1

1
Basically, will the @synchronized(myArray) freeze any accessor calls (have the call hang 
until the lock lets up and then execute)?

いいえ、ただし、アクセサーを呼び出す前に、配列インスタンスで synchronized ディレクティブを使用すると、アクセサーがフリーズします。
スレッド 1 が配列インスタンスの同期ブロックに入り、スレッド 2 が同じ配列の同期ブロックに入ろうとすると、スレッド 1 がブロックから出るのを待たなければなりません。オブジェクトが異なる場合、複数のスレッドが同期ブロックに入ることができます。

于 2012-12-12T23:23:32.660 に答える