Dalam senario di mana pembolehubah global diakses secara serentak oleh berbilang benang pada teras yang berbeza, adalah penting untuk mempertimbangkan implikasi penggunaan atom dan tidak menentu pembolehubah.
Kata Kunci Meruap
Kata kunci yang tidak menentu memastikan bahawa pengkompil tidak mengoptimumkan operasi memori untuk pembolehubah, menyebabkan pemproses sentiasa membaca nilai terus daripada memori. Walau bagaimanapun, walaupun tidak menentu menjamin akses memori langsung, ia tidak membayangkan akses atom.
Jenis Data Atom
Standard C 11 termasuk jenis data atom yang dilambangkan sebagai . Jenis ini menyediakan operasi atom, bermakna setiap operasi dijamin untuk dilaksanakan tanpa gangguan daripada benang lain. Ini memastikan bahawa nilai terkini sentiasa dibaca, tanpa mengira ketidakkonsistenan cache.
Jika tiada penyegerakan tambahan (seperti kunci), pembolehubah global yang dikongsi mempamerkan keterlihatan dan susunan kekangan yang ditentukan oleh parameter susunan memori yang digunakan dalam operasi. Walaupun pesanan lalai () menetapkan jumlah pesanan tunggal, nilai lapuk mungkin masih diperhatikan.
Walau bagaimanapun, operasi baca-ubah suai-tulis (seperti ) menjamin bahawa operasi itu sentiasa dilakukan pada nilai terkini. Ini memastikan operasi baca-ubah suai-tulis berturut-turut pada pembolehubah yang sama akan mengembalikan jujukan nilai yang unik dan tersusun.
Walaupun pembolehubah yang tidak menentu memastikan akses memori langsung, ia tidak menjamin atomic operasi. Untuk akses yang boleh dipercayai dan serentak kepada pembolehubah yang dikongsi, jenis data atom () hendaklah digunakan bersama-sama dengan primitif penyegerakan yang sesuai untuk memastikan tingkah laku program yang betul.
Atas ialah kandungan terperinci C 11 Concurrency: Bilakah Saya Harus Menggunakan Pembolehubah Atom vs. Meruap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!