C C 多執行緒

2021-09-27 11:55:18 字數 2791 閱讀 9387

前幾天簡單對c和c++中的建立多執行緒的函式進行了測試,這篇隨筆就簡單介紹一下建立執行緒的相關函式。

c中三個建立執行緒函式:pthread_create()、_beginthread()、createthread()

三個關閉執行緒函式:pthread_exit()、_endthread()、exitthread()

標頭檔案分別是:pthread.h、process.h、processthreadsapi.h

pthread_create()函式原型:

int pthread_create(pthread_t *tidp,

const pthread_attr_t *attr,

(void*)(*start_rtn)(void*),

void *arg);

_beginthread()函式原型:

uintptr_t _beginthread(void( *start_address )( void * ),

unsignedstack_size,void *arglist);

_beginthread()函式是呼叫createthread()函式來實現的,但多了一些功能,是c標準庫中提供的函式。而createthread()函式建立乙個執行緒在呼叫程序的虛擬位址空間內執行,是作業系統中的函式。可參考解釋:

createthread()函式原型:

handle winapi createthread(

_in_opt_ lpsecurity_attributes lpthreadattributes,

_in_ size_t dwstacksize,

_in_ lpthread_start_routine lpstartaddress,

_in_opt_ lpvoid lpparameter,

_in_ dword dwcreationflags,

_out_opt_ lpdword lpthreadid

);

pthread_exit()函式原型:

void pthread_exit(void *retval);

_endthread()函式原型:

void _endthread( void );  

void _endthreadex(

unsigned retval

);

exitthread()函式原型:

void winapi exitthread(

_in_ dword dwexitcode

);

貌似要使用pthread_exit();需要安全釋放,否則會出現記憶體洩露:pthread_exit()

下面測試一下各個函式:

pthread.h:

#include #include #include #define maxthreads 5

void* run(void* args)

int main()

pthread_join(tid[i], &status);//等待執行緒結束,結束的執行緒便不能再被連線

}pthread_attr_destroy(&attr);//銷毀attr資源

return 0;

}

pthread_join等待其他執行緒結束後再連線能連線的函式,已經結束的執行緒便不能再被連線。所以輸出結果可看到是按順序執行的。感覺就是加上了互斥鎖,不知道理解對不對?

process.h:

#include #include #include #define maxthread 5

void run(void*i)

int main()

_endthread();

return 0;

}

消除了型別強轉的警告,但程式無法正常退出,有時也無法正常進行。

--------------------update 2018-02-24 16:09:01---------------------

processthreadsapi.h:

#include #define maxthread 5

handle ghmutex;

dword winapi run_process(lpvoid p)

catch(...)

return getlasterror();

}int winapi winmain(hinstance hinstance, hinstance hprevinstance, pstr szcmdline, int icmdshow)

for(int i = 0; i < maxthread; i++)

} waitformultipleobjects(maxthread, hthreadarray, true, infinite);

for(int i = 0; i < maxthread; i++)

closehandle(ghmutex);

return 0;

}

C C 多執行緒入門

在學習多執行緒程式設計之前,必須先知道什麼是 執行緒函式,執行緒函式就是另乙個執行緒的入口函式.預設情況下乙個我們所寫的 都是只有乙個執行緒的,而這個執行緒的入口函式就是main 函式,這是系統預設的.而我們建立的另乙個執行緒也需要乙個函式來進入,這個函式就叫做執行緒函式.在c c 中,可以呼叫 執...

C C 多執行緒筆記

例項 include include using namespace std define n 3 執行緒個數 void thread content void args intmain void r pthread join tids i r 阻塞當前執行緒,等待指定 上乙個 執行緒完成 retu...

C C 多執行緒基礎程式設計

1.基本的阻塞型實現 multi thread.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include pch.h include include include using namespace std void thread01 void thread02 int main...