前幾天簡單對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...