各位看官們,大家好,上一回中咱們說的是“創建進程時的內存細節”的例子,這一回咱們說的例子是:創建線程時的內存細節。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們在前面章回中介紹過創建線程的例子,創建線程時使用的函數是pthread_create。今天我們一起說一下使用該函數創建線程時內存的一些細節問題。我們介紹的的重點還是內存布局中的四個分區。這點和前一回中介紹創建進程時內存細節的思路相同。
1.在主線程中使用pthread_create函數可以創建一個新線程,我們叫它子線程,主線程可以創建多個子線程; 2.子線程擁有自己的棧區,棧區的內容屬於自己,不能被其它子線程,甚至是主線程使用; 3.子線程沒有自己的代碼區,數據區和堆區,而是和主線程一起共用這些區域; 4.子線程運行時執行單獨的線程函數,該函數是在創建線程時設定的;最後,我們說一下pthread_create函數,在Linux中該函數是通過clone來創建線程的,子線程之所以能擁有自己的棧區,並且和主線程共享代碼區,數據區和堆區受益於clone函數,下面是clone函數的函數原型,請大家參考:
int clone(int (*fn)(void *), void *child_stack,
int flags, void *arg, ...
/* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
從上面的函數原型中可以看到,參數fn就是用來設定線程執行函數的,參數child_stack就是用來創建子線程的棧區的。內存中的其它區域與參數flags和arg有關,我們就不做詳細介紹了。
各位看官,關於“創建線程時的內存細節”的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。