Halaman itu salah. Tampaknya ada klaim bahwa operasi atom bebas kunci merupakan hak istimewa pada ISA secara umum, tetapi bukan itu masalahnya. Saya belum pernah mendengar ada tes-dan-set atom atau operasi bebas kunci lainnya yang memerlukan mode kernel.
Jika demikian, maka diperlukan C++11 pembacaan atom bebas kunci-modifikasi- menulis operasi untuk dikompilasi ke panggilan sistem, tetapi tidak dilakukan pada x86, ARM, AArch64, MIPS, PowerPC, atau CPU normal lainnya. (cobalah di https://godbolt.org/).
Ini juga akan membuat penguncian "ringan" (yang mencoba mengambil kunci tanpa panggilan sistem) menjadi tidak mungkin. (http://preshing.com/20111124/always-use-a-lightweight-mutex/)
ISA normal memungkinkan ruang pengguna untuk melakukan operasi RMW atom, pada memori yang dibagi antar thread atau bahkan antar proses terpisah. Saya tidak mengetahui mekanisme untuk menonaktifkan RMW atom untuk ruang pengguna di x86. Sekalipun ada hal seperti itu di ISA mana pun, itu bukan mode operasi normal.
Akses baca-saja atau tulis-saja biasanya bersifat atomik pada lokasi yang selaras di semua ISA, hingga lebar tertentu (Mengapa penetapan bilangan bulat pada variabel yang disejajarkan secara alami bersifat atomik di x86?), tetapi RMW atom memerlukan dukungan perangkat keras.
Pada x86, TAS adalah lock bts
, yang tidak memiliki hak istimewa. (Dokumentasi untuk awalan lock
). x86 memiliki luas pilihan operasi atom lainnya, seperti lock add [mem], reg/immediate
, lock cmpxchg [mem], reg
, dan bahkan lock xadd [mem], reg
yang mengimplementasikan fetch_add
ketika nilai kembalian diperlukan. (Bisakah num++ menjadi atomik untuk 'int num'?)
Kebanyakan RISC memiliki LL/SC, termasuk ARM, MIPS, dan PowerPC, serta semua ISA RISC lama yang sudah tidak umum lagi.
futex(2)
adalah panggilan sistem. Jika Anda memanggilnya, semua yang dilakukannya adalah dalam mode kernel.
Ini adalah mekanisme fallback yang digunakan dengan penguncian ringan jika ada perselisihan, yang menyediakan mode tidur/bangun dengan bantuan OS. Jadi bukan futex
sendiri yang melakukan apa pun di ruang pengguna, melainkan implementasi kunci yang dibangun di sekitar futex
dapat menghindari pembuatan panggilan sistem dalam kasus yang tidak diperdebatkan atau tidak diperdebatkan.
(misal, putar di ruang pengguna beberapa kali jika kunci tersedia.)
Inilah yang dijelaskan oleh halaman manual futex(7)
. Tapi menurut saya agak aneh menyebutnya "operasi futex" jika Anda tidak benar-benar melakukan panggilan sistem. Saya kira ini beroperasi pada memori yang mungkin dilihat oleh kode kernel atas nama thread lain yang menunggu, jadi semantik yang diperlukan untuk mengubah lokasi memori dalam kode ruang pengguna bergantung pada futex
.
person
Peter Cordes
schedule
02.09.2018
Test_and_Set (TS)
. CPU Intel memiliki atom, mereka hanya kekurangan instruksi khusus itu. Mungkin itu adalah bidang dalam register/register kontrol khusus mesin dan membaca/menulisnya dilindungi? Ping @PeterCordes. - person jww   schedule 02.09.2018cmpxchg
. Bagaimana saya bisa mem-pingnya? - person flow2k   schedule 02.09.2018[assembly]
:P - person Peter Cordes   schedule 02.09.2018lock bts
sejak 386.bts
= Uji dan setel bit. - person Peter Cordes   schedule 02.09.2018ts
. Tahukah Anda dari mana lengkungan itu berasal? Atau apakah mereka menggunakan set instruksi hipotetis? - person jww   schedule 02.09.2018ts
pada ISA mana pun. Sebagian besar adalah LL/SC, dan tidak memiliki RMW atom instruksi tunggal.) Ini sering disebut TAS, sama seperti cmpxchg biasanya CAS. - person Peter Cordes   schedule 02.09.2018