1

新しいタイプの compare&swap(a,b) (CAS) オブジェクト (新しいタイプを CAS2 と呼びましょう) を実装 (疑似コード) する必要があります。

CAS および CAS2 オブジェクトはどちらも、オブジェクト値を返す読み取り操作をサポートしています。

どちらもcompare&swap(a,b)操作をサポートしていますが、CASではこの操作はtrue/falseを返し、aと等しい場合はオブジェクト値をbに変更しますが、CAS2ではこの操作は同じ効果がありますが、trueを返す代わりに/false、操作の前に常にオブジェクト値を返す必要があります。

例えば:

CAS オブジェクトの値が 4 の場合、compare&swap (4,5) は true を返し、値を 5 に変更しますが、CAS2 オブジェクトでは、compare&swap (4,5) は 4 を返し、値を 5 に変更します。CAS オブジェクトの値が 4 の場合、compare&swap (5,6) は false を返し、何もしませんが、CAS2 では、compare&swap (5,6) は 4 を返し、何もしません。CAS2 オブジェクトは、1 つの CAS オブジェクトのみを使用して実装する必要があり、実装はウェイトフリーで線形化可能でなければなりません。

前もって感謝します!

4

1 に答える 1

1

あなたがリクエストしているバリアントは、実際には主流のものです。このような命令をミューテックスなしで実装するには、専用命令などのハードウェア サポートが必要です。詳細については、そのトピックに関するウィキペディアの記事を参照してください。

于 2013-03-05T03:33:50.207 に答える