Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::atomic<Singleton*> pInstance = nullptr;
- std::mutex mutex;
- Singleton* getInstance() {
- Singleton* p = pInstance.load(std::memory_order_acquire); // чтение_1
- if (p == nullptr) {
- std::lock_guard<std::mutex> lock(mutex);
- p = pInstance.load(std::memory_order_acquire); // чтение_2
- if (p == nullptr) {
- p = new Singleton; // запись_
- pInstance.store(p, std::memory_order_release); // запись_1
- }
- }
- return p;
- }
- // Здесь есть такие атомарные операции чтения и записи - помечены комментариями. Надо парные (с соответствующими номерами)
- // чтения-записи связять SW.
- // Тогда воспользуемся "шаблоном" c консультации и расставим acquire и release.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement