Giriş
Bu metod ile std::atomic<T> tipinin değerini alırız. Açıklaması şöyle
İmzası
İmzası şöyle.
Şöyle yaparız
std::atomic_load std::shared_ptr için özelleşmiş durumda. thread a çalışırken thread b yeni bir nesne yaratır ve double buffering ile nesneyi değiştirir. Şöyle yaparız.
Bu metod ile std::atomic<T> tipinin değerini alırız. Açıklaması şöyle
The reason why we have these free function templates at all is source compatibility with C11:C++ ile kodlarken bu metoda ihtiyacımız yok. std::atomic sınıfı zaten bu işlevi sağlıyor.
İmzası
İmzası şöyle.
template<class T>
T atomic_load(const std::atomic<T> *obj) noexcept;
ÖrnekŞöyle yaparız
#ifdef __cplusplus
#include <atomic>
#define _Atomic(X) std::atomic<X>
#else
#include <stdatomic.h>
#endif
_Atomic(int) c;
int get_c(void) {
return atomic_load(&c);
}
Örnek - std:.shared_ptrstd::atomic_load std::shared_ptr için özelleşmiş durumda. thread a çalışırken thread b yeni bir nesne yaratır ve double buffering ile nesneyi değiştirir. Şöyle yaparız.
std::shared_ptr<Object> object;
void thread_a()
{
std::atomic_load(&object)->doSomething(); // (1)
}
void thread_b()
{
std::shared_ptr<Object> oldObject = std::atomic_load(&object);
std::shared_ptr<Object> newObject = std::make_shared<Object>();
// Update new object accordingly...
while (!std::atomic_compare_exchange_weak(object, oldObject, newObject));
}
Hiç yorum yok:
Yorum Gönder