同期は共有問題を排除する比較的簡単な手法ですが、注意深く使用する必要があります。
同期の目的はタスクを安全に並列実行することですが、安全ではないときに並列実行を避けることでこれを実現します。ロックを待機する間、タスクは何のワークも実行しません。
ロックの取得と解放には、無視できない時間がかかります。ワークよりも同期に多くの時間を費やすタスクは容易にを記述できます。
これら 2 つの問題から、同期の使用には注意が必要であり、固有の問題を解決するため注意深く同期を使用します。タスクの大きな領域を同期する場合、それほど多くの同期を使用することなくタスクを安全に実行できるように、タスクの構造を再構成することを検討してください。
1 つの方法として、タスクが必要とするデータを同期してプライベートのメモリーにインポートし、プライベート・データを操作して、結果のエクスポートを同期する手法があります。
同期に関連する究極の問題は、デッドロックの危険性です。デッドロックは、1 つ以上のスレッドが処理を続行できないときに発生します。これは、タスクが 1 つのロックを取得した後に別のロックの取得を試みる間に、別のタスクが 2 番目のロックを取得してから最初のロックを要求するようなケースで発生します。この状況はデッドロックと呼ばれ、プログラムはハングアップします。
同期を追加して、問題が解決されたかを確認するため依存関係ツールを実行します。これにより、それまで隠されていた別の問題が明らかになることがあります。そのため、ロックを追加した後に依存関係ツールを再度実行し、偶発的なデッドロックがないか、または一致しないアノテーションの組み合わせがないかを確認します。依存関係ツールは、メモリーのデータアクセスに加えて、アノテーションが追加されたプログラムのロックイベントを観察できるため、デッドロックの可能性を検出できます。