2009-08-12 6 views

答えて

1

最新のCPUの中でもSparc64は、ダブルワイドCASもLL/SCも実装していません。このように、ロックフリーコードを実装することは問題である。ソリューションはありますが、CASやLL/SCをサポートしているため、他のプラットフォームには存在しない問題(ABA)の解決策です。さらに、この制限のために、Sparceではさまざまなロックフリーアルゴリズムを実装できません。

0

具体的には、SPARCSPARCv9の実装を見ることができます。membar_ *関数(同じファイル内)を見て、より強い保証を得るためにできることを確認する必要があります。

+0

私はいくつかのアセンブリを学ぶ必要がないことを望んでいました - 一般に、これらの下位レベルの構造にマップするC APIがあり、必要なのはダブルワードCAS(Sparcでは利用できません)またはLL/SCそれは)。もしSparc CAS *が* LL/SCならば、うまくいけば、実際にCからLL/SCを使う方法が必要です。インラインアセンブラではなく、私が使うことができる関数呼び出しが必要です。 –

+0

アセンブリについて学ぶ必要はありません。これらは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を使用しますが、同じ原則が適用されます。 –

+0

問題は、ABAの問題を解決するためにダブルワードCASを使用していることです。 SparcはダブルワードCASをサポートしていませんが、LL/SCを持っています。これは一言ではあるがABA問題を解決します。 Sparc CASのシングルワードが* CASの場合、私には役に立たない。 OTOHが内部でLL/SCを使用して実装されている場合、それは問題ありません。このように、原子op C APIに関するSunのドキュメントは役に立たなかった。ブーストはそれにも答えなかったので、どちらにもなりませんでした。 –

関連する問題