循環バッファキューでのロックフリーの進行保証
概要:
多くのプログラマー「ロックフリー」とは単にミューテックスを使用しない同時プログラミングを指すと誤解されています。ただし、真のロックフリー アルゴリズムは進行保証を提供し、他のスレッドのアクションに関係なく、少なくとも 1 つのスレッドが確実に進行できるようにします。
Liblfds 境界キュー:
liblfds ライブラリでの有界キューの実装は、ロックフリーの進行保証の点で疑問があるようです。このアルゴリズムはプッシュ用にスロットを予約します。つまり、プッシュ スレッドが完了するまでスロットをポップすることはできません。この依存関係により、キューが本当にロックフリーとして認定されるかどうかについて懸念が生じます。
ロックフリーの定義:
ロックフリー構造とは、どのスレッドでもロックフリー構造を実現できる構造のことです。他のスレッドによる構造の使用をブロックすることなく、いつでも無期限に一時停止できます。この定義によれば、liblfds キューは厳密にはロックフリーではありません。プッシュスレッドが一時停止されると、キューは使用できない状態になり、固定サイズキューの規約に違反します。
パフォーマンスと正確性:
この実装中妥当なパフォーマンス特性を示す可能性がありますが、真にロックのない構造の重要な正確性特性がいくつか欠けています。主な機能上の欠点は次のとおりです。
結論:
liblfds の有界キューの実装は、真のロックフリー構造に比べて制限されています。ロックフリーの最も厳密な定義。パフォーマンス上の利点はいくつかありますが、すべてのシナリオで進行状況と正確性を保証するために重要な特定の機能保証が欠けています。
以上がLiblfds 有界キューは本当にロックフリーですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。