1

この投稿によると、Java でロックフリー キューの実装を拡張しようとしています。

私の実装では、アトミック変数/参照のみを使用することに制限されています。さらに、キューには最大サイズが必要です。したがって、キューがいっぱいの場合は putObject() をブロックし、キューが空の場合は getObject() をブロックする必要があります。

現時点では、ロックを使用せずにこれを解決する方法がわかりません。

たとえば、AtomicInteger を使用する場合、変更操作はアトミックになります。しかし、まだ putObject() と getObject() でチェックと変更の状況を処理しなければならないという問題がありますよね? そのため、現在のキュー サイズを確認した後、エンキュー スレッドが中断されるという状況が依然として存在します。

現時点での私の質問は、この問題が私の現在の制限で解決できるかどうかです。

あいさつ

4

2 に答える 2

0

これは非常に一般的な問題であり、通常はリング バッファを使用することで解決されます。これは、Disruptorライブラリと同様に、ネットワーク アダプタが使用するものです。Disruptor を見て、リング バッファーで何ができるかの良い例をお勧めします。

于 2013-12-20T11:13:34.837 に答える