###atomicな間接参照の読み込みについて
私は検索しましたが、この話題について書かれている記事をみつけることは難しかったので、質問させていただきました。わからないことは、次の通りです。
std::atomic
にポインタを入れて間接参照するときに、そのポインタの中身にアクセスする処理までスレッドセーフになるか。
(18/08/30 12:17 追記) 参照先にアクセスできるのは唯一の、ポインタのatomic変数だけです。
Thanks for any help! :)
cpp
1#include <iostream> 2#include <atomic> 3#include <thread> 4 5struct mystruct 6{ 7 ~mystruct() { value = 0; } 8 int value = 0; 9}; 10 11class myclass 12{ 13 mystruct m_mystruct; 14 std::atomic<mystruct*> m_atomic_mystruct_ptr; 15public: 16 myclass() { m_atomic_mystruct_ptr.store(&m_mystruct); } 17 mystruct & get_mystruct() { return *m_atomic_mystruct_ptr.load(); } 18 void mystruct_worker(std::size_t num) { 19 while(num --> 0) 20 m_atomic_mystruct_ptr.load()->value++; 21 } 22}; 23 24int main() 25{ 26 myclass m; 27 std::thread t(&myclass::mystruct_worker, &m, 10000); 28 std::this_thread::sleep_for(std::chrono::nanoseconds(10)); 29 int i = m.get_mystruct().value; // この処理はスレッドセーフか? 30 std::cout << i << "\n"; 31 t.joinable() ? t.join() : t.detach(); // (13:01追記)単に、t.join()だけでOK! 32}

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/30 03:58