C++ 11ドラフトn3242のセクション20.7.2.5を読むと、shared_ptrのアトミック操作があるように見えます。これにより、GCを心配することなく複雑な構造に対してロックフリーを行うことができます/メモリーリーク。C++でのshared_ptrのアトミック操作11
しかし、GCC-4.7.0では正常に使用できませんでした。私は単純に次のプログラム
#include <atomic>
#include <memory>
#include <string>
struct X {
int x;
double y;
std::string s;
};
int main() {
std::shared_ptr<X> x(new X);
auto p = std::atomic_load(&x);
}
をテストし、それがコンパイラエラーがあります。
c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’
誰もが私がここに逃したものを知っていますか?それとも単にgccがまだ実装していないのですか?
'shared_ptr <>'の内部参照カウントは、特別な記述をしなくてもアトミックにインクリメントされ、デクリメントされます。 'atomic_load'とまったく何をしようとしていますか? – ildjarn
@ildjarn、こちらを読んでください。http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2674.htm –
@ildjarn shared_ptr変数が指しているスレッドをスレッドが変更している場合、回避する必要がありますshared_ptr自体にアクセスすると、データ競合が発生します。 – bames53