sig_atomic_t
bukan tipe data atomik. Itu hanya tipe data yang boleh Anda gunakan dalam konteks penangan sinyal, itu saja. Jadi lebih baik baca namanya sebagai "atomic relative to signal handling".
Untuk menjamin komunikasi dengan dan dari penangan sinyal, hanya diperlukan salah satu sifat tipe data atomik, yaitu fakta bahwa baca dan perbarui akan selalu melihat nilai yang konsisten. Jenis data lainnya (seperti mungkin long long
) dapat ditulis dengan beberapa instruksi assembler untuk bagian bawah dan atas, mis. sig_atomic_t
dijamin dapat dibaca dan ditulis sekaligus.
Jadi platform dapat memilih jenis basis bilangan bulat apa pun sebagai sig_atomic_t
yang dapat membuat jaminan bahwa volatile sig_atomic_t
dapat digunakan dengan aman dalam penangan sinyal. Banyak platform memilih int
untuk ini, karena mereka tahu bahwa untuk mereka int
ditulis dengan satu instruksi.
Standar C terbaru, C11, memiliki tipe atom, tetapi merupakan hal yang sama sekali berbeda. Beberapa di antaranya (yang "bebas kunci") juga dapat digunakan dalam penangan sinyal, tetapi sekali lagi itu adalah cerita yang sama sekali berbeda.
Perhatikan bahwa sig_atomic_t
tidak aman untuk thread, hanya aman untuk sinyal asinkron.
Atomics melibatkan dua jenis penghalang:
- Penghalang penyusun. Itu memastikan bahwa kompiler tidak menyusun ulang membaca/menulis dari/ke variabel atomik relatif terhadap membaca dan menulis ke variabel lain. Inilah yang
volatile
kata kunci tidak. - Penghalang dan visibilitas CPU. Itu memastikan bahwa CPU tidak menyusun ulang membaca dan menulis. Pada x86, semua beban dan penyimpanan ke penyimpanan 1,2,4,8 byte yang selaras bersifat atomik. Visibilitas memastikan bahwa toko dapat dilihat oleh utas lainnya. Sekali lagi, pada CPU Intel, penyimpanan dapat dilihat langsung oleh utas lainnya karena koherensi cache dan protokol koherensi memori MESI. Tapi itu mungkin berubah di masa depan. Lihat §8.1 OPERASI ATOM TERKUNCI di Intel® 64 dan IA-32 Architectures Software Developer Manual Volume 3A untuk detail lebih lanjut.
Untuk pembahasan subjek yang komprehensif, tonton Atomic Weapons:The C++ Memory Model and Modern Hardware.