Dalam dokumentasi std::memory_order
di cppreference.com ada contoh pemesanan santai:
Pemesanan santai
Operasi atom yang ditandai
memory_order_relaxed
bukan operasi sinkronisasi; mereka tidak memaksakan urutan di antara akses memori bersamaan. Mereka hanya menjamin konsistensi urutan atomitas dan modifikasi.Misalnya, dengan x dan y awalnya nol,
// Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); // B // Thread 2: r2 = x.load(std::memory_order_relaxed); // C y.store(42, std::memory_order_relaxed); // D
diizinkan untuk menghasilkan r1 == r2 == 42 karena, meskipun A diurutkan-sebelum B dalam utas 1 dan C diurutkan sebelum D dalam utas 2, tidak ada yang mencegah D muncul sebelum A dalam urutan modifikasi y, dan B dari muncul sebelum C dalam urutan modifikasi x. Efek samping D pada y dapat terlihat dengan beban A di ulir 1 sedangkan efek samping B pada x dapat terlihat dengan beban C di ulir 2. Secara khusus, ini dapat terjadi jika D selesai sebelum C di utas 2, baik karena penyusunan ulang kompiler atau saat runtime.
dikatakan "C diurutkan sebelum D dalam utas 2".
Menurut definisi urutan-sebelumnya, yang dapat ditemukan dalam Urutan evaluasi , jika A diurutkan sebelum B, maka evaluasi A akan diselesaikan sebelum evaluasi B dimulai. Karena C diurutkan sebelum D dalam utas 2, C harus diselesaikan sebelum D dimulai, maka bagian kondisi dari kalimat terakhir snapshot tidak akan pernah terpuaskan.