Rumah >pembangunan bahagian belakang >C++ >Bolehkah Satu Benang Membaca Data Lapuk daripada Pembolehubah Atom C 11?

Bolehkah Satu Benang Membaca Data Lapuk daripada Pembolehubah Atom C 11?

DDD
DDDasal
2024-12-13 17:53:10301semak imbas

Can One Thread Read Stale Data from a C  11 Atomic Variable?

Konkurensi: Memahami Atom dan Meruap dalam Model Memori C 11

Pertimbangkan pembolehubah global yang diakses oleh berbilang utas berjalan serentak pada teras yang berbeza. Setiap utas boleh menulis dan membaca daripada pembolehubah. Bolehkah satu utas membaca maklumat lapuk daripada pembolehubah atom?

Meruap dan Atom: Satu Perbezaan

Walaupun atom membayangkan akses atom, tidak menentu sahaja tidak. Carian tidak menentu digunakan dalam situasi seperti I/O dipetakan memori dan pengendalian isyarat. Ia menjadi berlebihan apabila dipasangkan dengan std::atomic. Tambahan pula, ia tidak mempunyai kaitan dengan akses atom atau susunan memori antara benang.

Penyusunan Memori dengan Pembolehubah Atom

Perpustakaan std::atomic dalam C 11 menawarkan jenis integer atom, std::atomic ai;
Had keterlihatan dan penjujukan bergantung pada susunan memori yang disediakan untuk operasi:

  • Penyusunan Konsisten Urutan (std::memory_order_seq_cst): Mengekalkan satu jumlah pesanan untuk semua operasi merentas semua pembolehubah. Ia tidak menjamin bahawa nilai lapuk akan tiada, tetapi ia memastikan nilai yang diperoleh ditentukan dan ditentukan oleh kedudukan operasi dalam pesanan.
  • Pesanan Santai (std::memory_order_relaxed): Mengalih keluar sebarang pesanan kekangan, membolehkan kelajuan optimum tetapi mempertaruhkan pelaksanaan yang tidak dapat diramalkan pesanan.

Read-Modify-Write (RMW) Operasi: Menjamin Kesegaran

Operasi RMW, seperti exchange(), compare_exchange_strong(), dan fetch_add( ), menawarkan jaminan: mereka sentiasa bertindak berdasarkan nilai terkini. Dalam satu siri panggilan ke ai.fetch_add(1) daripada berbilang rangkaian, tiada nombor pendua atau hilang akan dikembalikan. Walau bagaimanapun, benang mungkin melihat nilai pada titik masa yang berbeza.

Awas dan Kesimpulan

Memahami operasi atom adalah penting. Penyelidikan menyeluruh dan semakan kod disyorkan sebelum menggunakannya dalam kod pengeluaran. Kunci selalunya memberikan pendekatan yang lebih mudah diakses dan hampir sama cekap untuk keselarasan.

Atas ialah kandungan terperinci Bolehkah Satu Benang Membaca Data Lapuk daripada Pembolehubah Atom C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn