本文目錄一覽:
- 1、C語言多線程的操作步驟
- 2、c語言實現多線程
- 3、c語言怎麼創建線程和使用?
C語言多線程的操作步驟
線程創建
函數原型:intpthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
返回值:若是成功建立線程返回0,否則返回錯誤的編號。
形式參數:pthread_t*restrict tidp要創建的線程的線程id指針;const pthread_attr_t *restrict attr創建線程時的線程屬性;void *(start_rtn)(void)返回值是void類型的指針函數;void *restrict arg start_rtn的形參。
線程掛起:該函數的作用使得當前線程掛起,等待另一個線程返回才繼續執行。也就是說當程序運行到這個地方時,程序會先停止,然後等線程id為thread的這個線程返回,然後程序才會斷續執行。
函數原型:intpthread_join(pthread_tthread, void **value_ptr);
參數說明如下:thread等待退出線程的線程號;value_ptr退出線程的返回值。
返回值:若成功,則返回0;若失敗,則返回錯誤號。
線程退出
函數原型:voidpthread_exit(void *rval_ptr);
獲取當前線程id
函數原型:pthread_tpthread_self(void);
互斥鎖
創建pthread_mutex_init;銷毀pthread_mutex_destroy;加鎖pthread_mutex_lock;解鎖pthread_mutex_unlock。
條件鎖
創建pthread_cond_init;銷毀pthread_cond_destroy;觸發pthread_cond_signal;廣播pthread_cond_broadcast;等待pthread_cond_wait。
c語言實現多線程
目錄:
Linux操作系統,C語言實現多線程
Windows操作系統,C語言實現多線程
Windows下的多線程(不帶停止)
Linux操作系統,C語言實現多線程:
#include stdio.h
#include stdlib.h
#include pthread.h
void * ThreadOne ( void * threadArg )
{
printf ( “線程開始啦,參數是:%s\n” , (char *)threadArg );
return NULL;
}
int main ( void )
{
pthread_t ThreadID; /* 記錄線程標識符 */
void * waitingResult; /* 等待線程退出的等待結果 */
int errorCode; /* 記錄線程的錯誤代碼 */
char * aMessage = “這是線程的參數” ;
/* 創建並啟動線程ThreadOne。若返回值非零,則線程創建失敗 */
errorCode = pthread_create( ThreadID, NULL, ThreadOne, aMessage );
if ( errorCode != 0 )
{
printf (“線程ThreadOne創建失敗。錯誤代碼:%d\n”, errorCode );
return EXIT_FAILURE ;
}
/* 等待線程標識符為的ThreadID的線程結束 */
errorCode = pthread_join( ThreadID, waitingResult );
if ( errorCode != 0 )
{
printf ( “等待線程退出等待失敗。錯誤代碼:%d\n” , errorCode ) ;
return EXIT_FAILURE ;
}
printf( “線程的返回值是%p\n”, waitingResult );
return EXIT_SUCCESS ;
}
Windows操作系統,C語言實現多線程:
#include stdio.h
#include windows.h
DWORD APIENTRY ThreadOne ( LPVOID threadArg )
{
printf ( “線程開始啦,參數是:%s\n” , (char *)threadArg );
return 0;
}
int main ( void )
{
HANDLE hThread; /* 記錄線程句柄 */
DWORD ThreadID; /* 記錄線程ID號 */
DWORD waitingResult; /* 等待線程退出的等待結果 */
DWORD threadExitCode; /* 記錄線程的返回值 */
char * aMessage = “這是線程的參數” ;
/* 創建並啟動線程ThreadOne,返回值為線程句柄,賦值給hThread */
hThread = CreateThread ( NULL, 0L, ThreadOne, (LPVOID)aMessage, 0L, ThreadID );
if ( hThread == NULL )
{
printf (“線程ThreadOne創建失敗。錯誤代碼:%lu\n”, GetLastError() );
return EXIT_FAILURE ;
}
/* 等待線程句柄為的hThread線程結束 */
waitingResult = WaitForSingleObject ( hThread, INFINITE );
if ( waitingResult == WAIT_FAILED )
{
printf ( “等待線程退出等待失敗。錯誤代碼:%lu\n” , GetLastError() ) ;
return EXIT_FAILURE ;
}
if ( GetExitCodeThread ( hThread , threadExitCode ) )
printf ( “線程的返回值是%lu\n”, threadExitCode ) ;
else
printf ( “獲取線程的返回值獲取失敗。錯誤代碼:%lu\n” , GetLastError() ) ;
return EXIT_SUCCESS ;
}
Windows下的多線程:(不帶停止)
#include stdio.h
#include windows.h
DWORD WINAPI duoxianchen(LPVOID lpParam);
int main(int argc, char *argv[])
{
int num=0;
CreateThread(NULL,NULL,duoxianchen,num,NULL, NULL);
while(1)
{
num++;
printf(“主線程! %05d\n”,nu***eep(40);
}
return 0;
}
DWORD WINAPI duoxianchen(LPVOID lpParam)
{
int* a=lpParam;
while(1)
{
++*a;
printf(“副線程! %05d 0x%p\n”,*a,a);
Sleep(80);
}
return 0;
}
c語言怎麼創建線程和使用?
進程的生命周期:
[1].創建 — fork
[2].執行 — a. exec
b.子進程實現代碼邏輯
[3].結束 — exit _exit
殭屍態進程—wait waitpid
孤兒進程
————————————–
進程存在的問題:
(1).進程的創建 — 複製
(時間 和 空間的開銷很大)
(2).進程的運行 — 調度–
pthread_create創建一個線程,thread是用來表明創建線程的ID,attr指出線程創建時候的屬性,我們用NULL來表明使用缺省屬性。start_routine函數指針是線程創建成功後開始執行的函數,arg是這個函數的唯一一個參數。表明傳遞給start_routine的參數。
pthread_exit函數和exit函數類似用來退出線程.這個函數結束線程,釋放函數的資源,並在最後阻塞,直到其他線程使用pthread_join函數等待它。然後將*retval的值傳遞給**thread_return.由於這個函數釋放所以的函數資源,所以retval不能夠指向函數的局部變量。
pthread_join和wait調用一樣用來等待指定的線程。下面我們使用一個實例來解釋一下使用方法.在實踐中,我們經常要備份一些文件。下面這個程序可以實現當前目錄下的所有文件備份。
參考資料
CSDN.CSDN [引用時間2018-1-9]
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/154568.html