Sparcの64ビットSolarisでは、load-link/condition-storeを使用してatomic_cas_64()関数呼び出しを実装していますか?SparcのSolaris上でのatomic_cas_64()の内部実装ですか?
もしそうでなければ、SolarisはユーザーモードのCコードでll/scを利用することを提案していますか?
Sparcの64ビットSolarisでは、load-link/condition-storeを使用してatomic_cas_64()関数呼び出しを実装していますか?SparcのSolaris上でのatomic_cas_64()の内部実装ですか?
もしそうでなければ、SolarisはユーザーモードのCコードでll/scを利用することを提案していますか?
最新のCPUの中でもSparc64は、ダブルワイドCASもLL/SCも実装していません。このように、ロックフリーコードを実装することは問題である。ソリューションはありますが、CASやLL/SCをサポートしているため、他のプラットフォームには存在しない問題(ABA)の解決策です。さらに、この制限のために、Sparceではさまざまなロックフリーアルゴリズムを実装できません。
私はいくつかのアセンブリを学ぶ必要がないことを望んでいました - 一般に、これらの下位レベルの構造にマップするC APIがあり、必要なのはダブルワードCAS(Sparcでは利用できません)またはLL/SCそれは)。もしSparc CAS *が* LL/SCならば、うまくいけば、実際にCからLL/SCを使う方法が必要です。インラインアセンブラではなく、私が使うことができる関数呼び出しが必要です。 –
アセンブリについて学ぶ必要はありません。これらはC APIです。こちらのドキュメントをご覧くださいhttp://docs.sun.com/app/docs/doc/816-5168/atomic-cas-3c?a=viewおよびこちらhttp://docs.sun.com/app/ docs/doc/816-5168/membar-ops-3c?a = viewです。それはあなたを動かすのに十分なはずです。例が必要な場合は、https://svn.boost.org/trac/boost/browser/trunk/boost/smart_ptr/detail/sp_counted_base_solaris.hppをご覧ください。これはatomic_cas_32を使用しますが、同じ原則が適用されます。 –
問題は、ABAの問題を解決するためにダブルワードCASを使用していることです。 SparcはダブルワードCASをサポートしていませんが、LL/SCを持っています。これは一言ではあるがABA問題を解決します。 Sparc CASのシングルワードが* CASの場合、私には役に立たない。 OTOHが内部でLL/SCを使用して実装されている場合、それは問題ありません。このように、原子op C APIに関するSunのドキュメントは役に立たなかった。ブーストはそれにも答えなかったので、どちらにもなりませんでした。 –