2011-06-04 8 views
1

intrensicのアトミック関数をセマフォの代替としてどのように使用することができますか?セマフォの代わりにintrensicのアトミック関数の使用

Recnetly私はcpuが標準的な順序違反でセマフォーの使用を停止したために問題が発生しました。この問題は、セマフォを取得してCPUのグローバルメモリをロックする代わりに、intrensicのアトミック関数を使用することで修正されました。

このintrensicアトミック関数の使用法を理解していないので、CPUのグローバルメモリにアクセスできませんでした。

ありがとう、 Ivak。

答えて

0

実際、セマフォーもアトミック関数に依存しています(ほとんどの実装で)spinlocksを見てください。これらはパフォーマンスの特性が異なる低レベルのセマフォーのようなものです。

しかし、クリティカルセクションが操作を非常に単純に保持し、原子的に行うことができる状況があります。カウンタをインクリメントする。キューに要素をエンキューするなど、より複雑なことがあります。単一の操作ではなく、アトミックで行うことができます。

とにかく、セマフォを使用すると、何らかの状況でデッドロックが発生する可能性があります。何もロックしないロックフリー操作を使用すると、ロック順に違反することはできません。

もちろん、アトミック操作はすべてに対応していない、いくつかのデータ構造は、ちょうど、時にはあなたがロックされなければならない時に、ネットワーク経由で複雑な操作を行うには、ロックフリーすることはできません...セマフォがまだ必要とされます。

アトミックを使用するバグのあるコードでは、セマフォで永久にスレッドを終了しなくても、ループでスレッドが回転することになります。

関連する問題