Apakah implementasi glibc dari fungsi pthread_spin_lock() dan pthread_spin_unlock() memiliki instruksi pagar memori?

Apakah implementasi glibc dari fungsi pthread_spin_lock() dan pthread_spin_unlock() memiliki instruksi pagar memori? (Saya tidak dapat menemukan instruksi pagar apa pun.)

Pertanyaan serupa ada jawabannya di sini. Apakah pthread_mutex_lock berisi instruksi pagar memori?


person Hiro Yoshioka    schedule 13.12.2020    source sumber


Jawaban (1)


Apakah implementasi glibc dari fungsi pthread_spin_lock() dan pthread_spin_unlock() memiliki instruksi pagar memori?

Tidak ada implementasi yang -- yang ada adalah implementasi sebuah untuk setiap prosesor yang didukung.

Implementasi x86_64 tidak menggunakan pagar memori; ia menggunakan awalan lock sebagai gantinya:

gdb -q /lib/x86_64-linux-gnu/libpthread.so.0

(gdb) disas pthread_spin_lock
Dump of assembler code for function pthread_spin_lock:
   0x00000000000108c0 <+0>:     lock decl (%rdi)
   0x00000000000108c3 <+3>:     jne    0x108d0 <pthread_spin_lock+16>
   0x00000000000108c5 <+5>:     xor    %eax,%eax
   0x00000000000108c7 <+7>:     retq   
   0x00000000000108c8 <+8>:     nopl   0x0(%rax,%rax,1)
   0x00000000000108d0 <+16>:    pause  
   0x00000000000108d2 <+18>:    cmpl   $0x0,(%rdi)
   0x00000000000108d5 <+21>:    jg     0x108c0 <pthread_spin_lock>
   0x00000000000108d7 <+23>:    jmp    0x108d0 <pthread_spin_lock+16>

Karena instruksi yang diawali lock sudah menjadi penghalang memori pada x86_64 (dan i386), tidak diperlukan penghalang memori tambahan.

Namun implementasi powerpc menggunakan lwarx dan stwcx petunjuk, yang lebih mendekati ke pagar memori, dan implementasi sparc64 menggunakan instruksi penuh membar (penghalang memori).

Anda dapat melihat berbagai implementasi dalam file sysdeps/.../pthread_spin_lock.* di sumber GLIBC.

person Employed Russian    schedule 13.12.2020
comment
Perlu diperhatikan bahwa implementasi x86_64 tidak memerlukan pagar memori, karena instruksi yang dikunci x86 adalah penghalang. - person caf; 14.12.2020