Advertisement
Guest User

Untitled

a guest
May 26th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. std::atomic<Singleton*> pInstance = nullptr;
  2. std::mutex mutex;
  3.  
  4. Singleton* getInstance() {
  5.     Singleton* p = pInstance.load(std::memory_order_acquire); // чтение_1
  6.     if (p == nullptr) {
  7.         std::lock_guard<std::mutex> lock(mutex);
  8.         p = pInstance.load(std::memory_order_acquire); // чтение_2
  9.             if (p == nullptr) {
  10.                 p = new Singleton; // запись_
  11.             pInstance.store(p, std::memory_order_release); // запись_1
  12.             }
  13.     }
  14.     return p;
  15. }
  16.  
  17. // Здесь есть такие атомарные операции чтения и записи - помечены комментариями. Надо парные (с соответствующими номерами)
  18. // чтения-записи связять SW.
  19.  
  20. // Тогда воспользуемся "шаблоном" c консультации и расставим acquire и release.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement