Rumah >pembangunan bahagian belakang >C++ >Adakah Piawaian C/C Menjamin Operasi Atom untuk Sebarang Jenis Data pada Seni Bina ARM dan x86-64?

Adakah Piawaian C/C Menjamin Operasi Atom untuk Sebarang Jenis Data pada Seni Bina ARM dan x86-64?

DDD
DDDasal
2024-12-15 14:29:31447semak imbas

Do C/C   Standards Guarantee Atomic Operations for Any Data Type on ARM and x86-64 Architectures?

ARM dan x86-64: Tiada Jenis Atom Terjamin

Bertentangan dengan andaian awal, piawaian bahasa C/C tidak memberikan jaminan operasi atom untuk mana-mana jenis data tertentu, walaupun pada 64-bit komputer.

Akses Atom melalui Isyarat lwn. Benang

Adalah penting untuk membezakan antara dua pengertian atom:

  • Atomik berkenaan dengan isyarat: Memastikan keselamatan isyarat, membenarkan bacaan yang betul untuk nilai yang dikemas kini selepas gangguan isyarat dalam urutan yang sama.
  • Atomik berkenaan dengan utas: Memastikan konsistensi data merentas berbilang rangkaian, mencegah rasuah semasa akses serentak.

Pelaksanaan GCC pada ARM dan x86-64

Sementara CPU moden seperti ARMv8 dan x86-64 boleh menjamin akses atom untuk operasi tertentu, jaminan ini tidak ditunjukkan pada peringkat bahasa. GCC dan pengkompil lain boleh mengoptimumkan kod dengan cara yang melanggar atomisitas peringkat perkakasan ini, seperti yang ditunjukkan oleh contoh berikut:

Walaupun x ialah pembolehubah 32-bit, GCC menyusun foo sebagai dua berasingan 16 -beban bit, yang boleh mengakibatkan bacaan bukan atom jika x diubah suai serentak.

Pergantungan pada std::atomic atau _Atomic

Satu-satunya cara untuk memastikan operasi atom dalam C dan C adalah dengan menggunakan std::atomic (C) secara eksplisit ) atau jenis _Atomic (C), yang menyediakan mekanisme penyegerakan yang diperlukan untuk menjamin selamat benang akses.

Atas ialah kandungan terperinci Adakah Piawaian C/C Menjamin Operasi Atom untuk Sebarang Jenis Data pada Seni Bina ARM dan x86-64?. 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