การใช้งาน glibc ของฟังก์ชัน pthread_spin_lock() และ pthread_spin_unlock() มีคำแนะนำเกี่ยวกับรั้วหน่วยความจำหรือไม่

การใช้งาน glibc ของฟังก์ชัน pthread_spin_lock() และ pthread_spin_unlock() มีคำแนะนำเกี่ยวกับรั้วหน่วยความจำหรือไม่ (ฉันไม่พบคำแนะนำเกี่ยวกับรั้วใด ๆ )

คำถามที่คล้ายกันมีคำตอบที่นี่ pthread_mutex_lock มีคำสั่งรั้วหน่วยความจำหรือไม่


person Hiro Yoshioka    schedule 13.12.2020    source แหล่งที่มา


คำตอบ (1)


การใช้งาน glibc ของฟังก์ชัน pthread_spin_lock() และ pthread_spin_unlock() มีคำแนะนำเกี่ยวกับรั้วหน่วยความจำหรือไม่

ไม่มีการใช้งาน -- มีการใช้งาน สำหรับโปรเซสเซอร์แต่ละตัวที่รองรับ

การใช้งาน x86_64 ไม่ได้ใช้รั้วหน่วยความจำ ใช้คำนำหน้า lock แทน:

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>

เนื่องจากคำสั่งที่นำหน้าด้วย lock เป็นตัวกั้นหน่วยความจำบน x86_64 (และ i386) อยู่แล้ว จึงไม่จำเป็นต้องมีตัวกั้นหน่วยความจำเพิ่มเติม

แต่การใช้งาน powerpc ใช้ lwarx และ stwcx คำแนะนำ ซึ่งใกล้เคียงกว่า ไปยังรั้วหน่วยความจำและการใช้งาน sparc64 ใช้คำสั่ง membar (อุปสรรคหน่วยความจำ) แบบเต็ม

คุณสามารถดูการใช้งานต่างๆ ได้ในไฟล์ sysdeps/.../pthread_spin_lock.* ในแหล่งที่มาของ GLIBC

person Employed Russian    schedule 13.12.2020
comment
เป็นที่น่าสังเกตว่าการใช้งาน x86_64 ไม่จำเป็นต้องใช้รั้วหน่วยความจำ เนื่องจากคำสั่งที่ล็อคด้วย x86 นั้นเป็นอุปสรรค - person caf; 14.12.2020