Cocoaにおける同期
ひとつのアプリケーションに複数のスレッドがあると、同じリソースに対する複数スレッドから変更が意図せず干渉する場合がある。基本的かつ有効な方針は、共有リソースを減らし、スレッド間のやり取りを最小化することだ。
不変オブジェクトはスレッドセーフであるので、スレッド間で安全に受け渡しすることができる。また、そもそもあるオブジェクトが単一のスレッドからしか利用されない場合は、当たり前ではあるがなにも問題はない。Foudation の基本的なクラスはだいたいスレッドセーフになっているが、そうでないものもあるので注意が必要。
同期ツール
しかし、完全に干渉のない設計が常にできるわけではないのでその場合には同期ツールを使う。同期ツールには以下のようなものがある。
- アトミック操作: 単純なデータ型を操作するだけの同期、スレッドをブロックしない点が特徴
- メモリバリア: 確実に正しい順序でメモリ操作を実行させる
- ロック: クリティカルセクションの保護ができる
- 条件変数: 特定の条件に該当する場合にスレッド同士シグナルを送り合う