nptl/glibc にはかなり大きな commit-git がありました。
http://sourceware.org/git/?p=glibc.git;a=commit;h=e51deae7f6ba2e490d5faeb8fbf4eeb32ae8f1ee
Ulrich Drepper と Jakub Jelinek @ 2007
lll_lock/lll_unlock の変更に興味があります
SMP コードでは、lll_unlock が次のように変更されました。
+# define __lll_unlock_asm "cmpl $0, %%gs:%P3\n\t" \
+ "je 0f\n\t" \
+ "lock\n" \
+ "0:\tsubl $1,%0\n\t"
ここ$0
で、 はfutex アドレスのゼロであり、%P3
MULTIPLE_THREADS_OFFSET 定数です。
それで、何に保存されますか$gs:MULTIPLE_THREADS_OFFSET
(別名$gs:(offsetof (tcbhead_t, multiple_threads))
?この値はプログラムの存続期間中にどのように変更されますか?