最終更新:2013-01-18 (金) 07:24:19 (4116d)  

@synchronized
Top / @synchronized

スレッド実行の同期

  • Objective-C では、アプリケーションのマルチスレッド処理をサポートしています。これは、2 つのスレッドが同時に同じオブジェクトを変更しようとする可能性があること、プログラムに深刻な問題を引き起こす可能性がある状況を意味します。同時に複数のスレッドによって実行されないようにコードの一部を保護できるように、Objective-C では @synchronized() ディレクティブを提供しています。
  • @synchronized() ディレクティブは、コードの一部を 1 つのスレッドで使用するようにロックします。スレッドが保護コードを抜け出すまで、つまり、@synchronized() ブロックの最後の文を通過するまで、他のスレッドはブロックされます。
  • @synchronized() ディレクティブは、唯一の引数として self を含む任意の Objective-C オブジェクトを受け取ります。このオブジェクトは、相互排他?(mutual exclusion)セマフォまたはミューテックス(mutex)と呼ばれています。これにより、スレッドはコードの一部を他のスレッドに使用されないようにロックできます。プログラムの個別のクリティカルセクションを保護するには、別々のセマフォを使用する必要があります。アプリケーションのマルチスレッド処理を開始する前に、すべての相互排他オブジェクトを作成して、競合状態を回避するのが最も安全です。

関連