在作業系統原理的術語中,執行緒是程序的一條執行路徑。所有的執行緒都是在同一程序空間執行,這也意味著多條執行緒將共享該程序中的全部系統資源,如虛擬位址空間,檔案描述符和訊號處理等等。但同一程序中的多個執行緒有各自的呼叫棧(call stack),自己的暫存器環境(register context),自己的執行緒本地儲存(thread-local storage)。 乙個程序可以有很多執行緒,每條執行緒並行執行不同的任務。
#include
iint pthread_create
(pthread_t *thread,
const pthread_attr_t *attr,
void*(
*start_routine)
(void*)
,void
*arg)
;
1、函式說明: pthreand_create()用來建立乙個執行緒,並執行第三個引數start_routine所指向的函式。
2、引數說明:
typedef struct
pthread_attr_t;
對於執行緒屬性,我們需要設定的是執行緒的分離狀態,如果有必要也需要修改每個執行緒的棧的大小,每個執行緒建立後預設是可匯合狀態,該狀態需要主線程呼叫pthread_join等待它退出,否則子執行緒在結束時,記憶體資源不能得到釋放造成記憶體洩漏,所以我們建立執行緒時一般會將執行緒設定為分離狀態
#include
#include
#include
#include
#include
#include
void
*thread_worker1
(void
*args)
;void
*thread_worker2
(void
*args)
;int main (
int argc,
char
**ar**)if(
pthread_attr_setstacksize
(&thread_attr,
120*
1024))
//設定執行緒屬性棧的大小if(
pthread_attr_setdetachstate
(&thread_attr,pthread_create_detached)
)//設定執行緒為可分離狀態
pthread_create
(&tid,
&thread_attr,thread_worker1,
&shared_var)
;//&tid,用來返回該執行緒的id,第二個引數是執行緒的屬性,第三個引數是子執行緒要完成的任務,第四個引數是傳給所呼叫的函式的指標
printf
("thread worker1 tid[%ld]created ok\n"
,tid)
;pthread_create
(&tid,
null
,thread_worker2,
&shared_var)
;printf
("thread worker2 tid[%ld]created ok\n"
,tid)
;pthread_attr_destroy
(&thread_attr)
;//執行緒屬性用完以後要摧毀
pthread_join
(tid,
null);
//執行緒2需要主線程呼叫pthread_join等待它退出
while(1
)//如果主線程退出子執行緒就全部退出了,所有要使用乙個迴圈語句
}void
*thread_worker1
(void
*args)
printf
("thread worker1 [%ld]start running..\n"
,pthread_self()
);//列印自己的執行緒id
while(1
)printf
("thread worker 1 exit...\n");
return
null;}
void
*thread_worker2
(void
*args)
printf
("thread worker 2 exit...\n");
return
null
;}
C 學習 多執行緒程式設計 多執行緒基礎
c 內建了對多執行緒程式設計的支援功能,所以相對於其他語言在多執行緒方面的問題,c 這裡就已經最小化或者不復存在。在.net framework 4.0中,c 中新增了兩個與多執行緒應用程式相關的重要功能 tpl 任務執行並行庫 和plinq 並行linq 兩者都提供對並行程式設計的支援,都可以利用...
多執行緒程式設計
1 多執行緒的基本思路不是在介面執行緒執行費時的 而是專門啟動乙個執行緒 稱作工作執行緒 來完成,介面執行緒只負責介面的 顯示 和操作,而工作執行緒只負責耗時的操作過程。2 對於普通的win32應用程式來說,執行緒可以分為兩種 介面 ui user inte ce 執行緒和工作執行緒。介面執行緒一般...
多執行緒程式設計
如何編寫執行緒安全的dll 在我的工作中經常會編寫dll,這些dll有個共同的特點就是都有乙個初始化函式,乙個資源釋放函式,其他幾個函式都是核心功能函式。而且這些dll有時會被多個程序同時呼叫,這就牽扯到多程序的多執行緒呼叫dll的問題。有點繞口,以下我根據我實踐中遇到的問題,分四種情況分享一下我解...