Bir sorum var: Biz hiçbir konuları kullanan bir uygulama varsa, biz iki şekilde bağlayabilirsiniz: zamanki gibiBir `-lpthread 'bağlanırken uygulama davranışı değişir mi? (Linux, Glibc)
1) Linki, -lpthread
ve -ldl
2 olmadan) Bağlantıyı iki kütüphaneye ekleyin: libpthread ve libdl.
E.g. Varsayılan olarak
$ cat a.c
int main(){printf("Hehe");}
$ gcc a.c -w -o a
$ gcc a.c -w -o a1 -ldl -lpthread
, hem kütüphaneleri dinamik bağlantılıdır:
$ ldd a
linux-gate.so.1
libc.so.6
/lib/ld-linux.so.2
$ ldd a1
linux-gate.so.1
libdl.so.2
libpthread.so.0
libc.so.6
/lib/ld-linux.so.2
ne kadar fark sürüm a
ve sürüm a1
arasında olacak mı? Uygulama içinden ve int glibc'den farklı şekilde ne olacak? Pthreads'ların bağlanması, iş parçacığı güvenli olmayandan iş parçacığı güvenli algoritmaya bir şey mi değiştirecek?
E.g. a1 izlemesinde
$ strace ./a 2>&1 |wc -l
73
$ strace ./a1 2>&1 |wc -l
103
, iki ek kütüphaneleri biraz daha
mprotect
s denir yüklenir ve bölümüne eklenir: kendisi birçok pthread fonksiyonları için saplama kodu içeren
set_tid_address; set_robust_list; rt_sigaction x 2; rt_sigprocmask; getrlimit; uname
Pthread bağlandığında hangi saplamalar değişti? – osgx
@osgx: http://www.ohloh.net/p/libpthread-stubs –