GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana sebenarnya sig_atomic_t bekerja?

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:

  1. 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.
  2. 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.


Linux
  1. Bagaimana Cara Kerja Awk ‘!a[$0]++’?

  2. Bagaimana Cara Kerja Sticky Bit?

  3. Bagaimana Cara Kerja Bom Garpu?

  1. Ssh – Bagaimana Tcp-keepalive Bekerja Di Ssh?

  2. Apa itu DNS dan Bagaimana Cara Kerjanya?

  3. Bagaimana rm bekerja? Apa yang rm lakukan?

  1. Apa itu Makefile dan bagaimana cara kerjanya?

  2. Bagaimana cara kerja debugger di Linux?

  3. Bagaimana cara kerja antarmuka loopback