程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第一百三十四回:C語言實例--創建線程時的內存細節)

一起talk C栗子吧(第一百三十四回:C語言實例--創建線程時的內存細節)

編輯:關於C語言

一起talk C栗子吧(第一百三十四回:C語言實例--創建線程時的內存細節)



各位看官們,大家好,上一回中咱們說的是“創建進程時的內存細節”的例子,這一回咱們說的例子是:創建線程時的內存細節。閒話休提,言歸正轉。讓我們一起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有關,我們就不做詳細介紹了。

各位看官,關於“創建線程時的內存細節”的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved