Dalam video, Herb Sutter, membincangkan tentang penggunaan atom, termasuk contoh di mana benang utama melancarkan benang pekerja. Pekerja menyemak bendera berhenti, dan benang utama akhirnya menetapkan bendera berhenti kepada benar menggunakan memory_order_seq_cst. Sutter menjelaskan bahawa menyemak bendera dengan memory_order_relaxed boleh diterima kerana kelewatan dalam menghentikan benang tidak penting.
Timbul persoalan mengapa bendera henti ditetapkan dengan memory_order_seq_cst dan bukannya memory_order_relaxed.
Tiada faedah kependaman yang bermakna untuk susunan memori yang lebih kukuh dalam senario ini, walaupun kependaman untuk melihat perubahan kepada bendera berhenti atau keep_running adalah penting.
ISO Piawaian C tidak menyatakan seberapa cepat stor kelihatan atau perkara yang mungkin mempengaruhinya. Ia hanya memerlukan pelaksanaan memastikan bahawa nilai terakhir yang diberikan oleh operasi atom atau penyegerakan kelihatan kepada semua urutan lain dalam tempoh masa yang terhad.
Kependaman antara utas adalah terutamanya isu kualiti pelaksanaan, dengan standard membiarkan perkara terbuka luas. Pelaksanaan C biasa biasanya disusun kepada asm untuk beberapa seni bina dan mendedahkan sifat koheren cache perkakasan, menghasilkan kependaman antara benang yang rendah.
Pada perkakasan sebenar yang menggunakan koheren cache, pesanan memori yang berbeza untuk menyimpan atau memuatkan tidak jadikan kedai kelihatan lebih awal dalam masa nyata. Mereka mengawal sama ada operasi kemudiannya boleh dilihat secara global sementara menunggu kedai menyerahkan daripada penimbal kedai kepada cache L1d.
Pesanan dan halangan yang lebih kuat, tidak menjadikan perkara berlaku lebih awal dalam erti kata yang mutlak. Mereka melambatkan perkara lain sehingga ia dibenarkan berlaku berbanding dengan stor atau memuatkan.
Menggunakan memory_order_relaxed untuk beban mempunyai faedah prestasi berikut:
Dalam senario khusus ini, di mana bendera berhenti adalah ditetapkan dengan jarang, kerja terbuang akibat beban palsu adalah minimum. Oleh itu, faedah prestasi menggunakan memory_order_relaxed mengatasi potensi kelemahan.
Atas ialah kandungan terperinci Mengapa menetapkan bendera berhenti menggunakan memory_order_seq_cst, jika anda menyemaknya dengan memory_order_relaxed?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!