2009-09-01 61 views
0

Linux上的一個資源提到了使用克隆系統調用來實現pthread-create,而不是其他一些基於unix的平臺(其實現方式與此相同)。
這意味着在Linux下,使用pthread_create從同一進程創建的兩個線程將具有不同的父進程標識。Linux上的pthread_create的實現

$ ./a.out 
new thread: pid 6628 tid 1026 (0x402) 
main thread: pid 6626 tid 1024 (0x400) 

問題

  • 雖然克隆系統調用創建一個子進程可以共享其母公司的執行上下文的配置量(如文件描述符和內存),在我看來,所有執行中這可能不是最有效的。在Linux下,從pthread_create創建的每個線程都有相應的進程(儘管它將與其他進程共享資源)?這個解釋是否正確?

回答

6

它看起來就像你可能會使用過時的LinuxThreads 實施的並行線程,它返回一個不同的PID爲每個線程。目前的實現是NPTL(原生POSIX線程庫),不這樣做。它仍然使用clone()實現,儘管clone()已經得到增強,允許在其上構建高效的符合POSIX標準的線程實現,並且NPTL廣泛使用這些增強功能。

您可以使用命令getconf GNU_LIBPTHREAD_VERSION確定您正在使用哪個實施。有關詳細信息和差異列表,請參閱pthreads(7)