1. 程式人生 > 其它 >Linux的程序和執行緒關係

Linux的程序和執行緒關係

一、理解Linux的程序,執行緒,PID,LWP,TID,TGID

程序是資源分配的基本單位,執行緒是排程的基本單位
程序是資源的集合,這些資源包括記憶體地址空間,檔案描述符等等,一個程序中的多個執行緒共享這些資源。
CPU對任務進行排程時,可排程的基本單位 (dispatchable entity)是執行緒。如果一個程序中沒有其他執行緒,可以理解成這個程序中只有一個主執行緒,這個主程序獨享程序中的所有資源。
程序的個體間是完全獨立的,而執行緒間是彼此依存,並且共享資源。多程序環境中,任何一個程序的終止,不會影響到其他非子程序。而多執行緒環境中,父執行緒終止,全部子執行緒被迫終止(沒有了資源)。
上述第一點說明是最基礎的,也是最重要的。

參考連結:https://www.cnblogs.com/wipan/p/9488318.html

二、檢視程序、執行緒的方法

在 Linux C/C++ 中通常是通過 pthread 庫進行執行緒級別的操作。

在 pthread 庫中有函式:

pthread_t pthread_self(void);
1
它返回一個 pthread_t 型別的變數,指代的是呼叫 pthread_self 函式的執行緒的 “ID”。

怎麼理解這個“ID”呢?

這個“ID”是 pthread 庫給每個執行緒定義的程序內唯一標識,是 pthread 庫維持的。

由於每個程序有自己獨立的記憶體空間,故此“ID”的作用域是程序級而非系統級(核心不認識)。

其實 pthread 庫也是通過核心提供的系統呼叫(例如clone)來建立執行緒的,而核心會為每個執行緒建立系統全域性唯一的“ID”來唯一標識這個執行緒。

這個系統全域性唯一的“ID”叫做執行緒PID(程序ID),或叫做TID(執行緒ID),也有叫做LWP(輕量級程序=執行緒)的。

參考連結:https://blog.csdn.net/test1280/article/details/87974748