多執行緒程式設計學習

2021-10-03 10:01:37 字數 2304 閱讀 9383

在作業系統原理的術語中,執行緒是程序的一條執行路徑。所有的執行緒都是在同一程序空間執行,這也意味著多條執行緒將共享該程序中的全部系統資源,如虛擬位址空間,檔案描述符和訊號處理等等。但同一程序中的多個執行緒有各自的呼叫棧(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的問題。有點繞口,以下我根據我實踐中遇到的問題,分四種情況分享一下我解...