ワークスティーリングアルゴリズムを使用してタスクを同時に実行し、スレッドのプールで構成されるアプリケーションを開発しようとしています。
これらのタスク
- 事前定義されたオブジェクトのセットにアクセスします。
- 実際に実行する前に、アクセスするすべてのオブジェクトに対する読み取り/書き込み権限を「アトミックに」取得する必要があります。
- 終了したら(そして最終的には終了することが保証されます)、取得したオブジェクトを解放します。
この問題を解決する1つの可能な方法は、各スレッドに一度にタスクを取得させてから、事前定義された順序を使用して各オブジェクトをロックしようとすることです。少なくとも1つが失敗した場合は、すべてのロックを解放し、別のタスクに進みます。
ただし、この方法では、オブジェクトの依存関係が大きいタスクが不足する可能性が高くなり、ライブロックが発生する可能性もあります。
同時実行性を最大化しながら一連のロックを取得する別の方法はありますか?(グローバルロックなし)または、システムを不要になるように変更しますか?もしそうなら、それについての良い論文はありますか?
ps:ティトンが答えたように、これは「食事する哲学者」問題の一般化されたバージョンです。非集中型のソリューション、特に高負荷(タスクの追加と削除)でうまく機能するアルゴリズムを探しています。