簡單c語言多線程參數,C語言多線程編程

本文目錄一覽:

C語言線程函數參數問題

·線程創建

函數原型:int pthread_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的形參。 =====這個地方就可以傳參數,

注意,這個地方是個指針,要想傳多個參數,可以定義一個結構體,把要傳的參數包起來,傳結構體的地址就ok

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;

}

多線程pthread_create的參數

C語言使用pthread_create()函數完成多線程的創建,pthread_create()函數共有四個參數。這四個參數分別為:

第一個 參數負責向調用者傳遞子線程的線程號

第二這個參數負責控制線程的各種屬性,這也是線程在創建的時候,最為複雜的一個參數。下面是這個結構體的定義:

在結構體中的第一個參數 detachstate 說明了線程的分離狀態。

PTHREAD_CREATE_DETACHED 分離狀態:父線程在創建子線程之後,,父線程不會去等待子線程結束再去運行自己接下來的程序;

PTHREAD_CREATE_JOINABLE 狀態:父線程會等待子線程運行結束,才繼續運行接下來的程序。

注意的是如果當線程一旦處於 PTHREAD_CREATE_DETACHED 狀態,那麼線程的狀態就無法再被修改了。線程創建時默認設置為PTHREAD_CREATE_JOINABLE狀態

schedpolicy說明的是線程的調度策略,這個值可以分別被設置為:

SCHED_FIFO: 先進先出

SCHED_RR: 輪轉法

SCHED_OTHER: 其他方法

schedparam參數實際上設置的是線程的優先級。這個參數僅當調度策略為實時(即SCHED_RR或SCHED_FIFO)時才有效

這個參數設置線程的調度參數是拷貝父線程的線程調度參數,還是上面的兩個參數 schedpolicy 和 schedparam 屬性進行設置。

該參數可以被設為:

PTHREAD_INHERIT_SCHED :表示新現成將繼承創建線程的調度策略和參數)

PTHREAD_EXPLICIT_SCHED :表示使用在schedpolicy和schedparam屬性中顯式設置的調度策略和參數

scope參數設置的是線程優先級的使用範圍。

PTHREAD_SCOPE_PROCESS 進程級競爭資源

PTHREAD_SCOPE_SYSTEM 系統級競爭資源

這個參數是線程棧的起始地址,這個參數只有在線程棧由自己創建時,才需要設置。當線程棧由用戶直接創建,而不是通過系統創建時,線程棧的大小和位置都可以進行修改,但是用戶程序需要完成對線程棧空間的釋放。在設置該參數之後,guardsize警戒棧緩衝區的大小就變為0,為了防止棧溢出就需要對線程棧的境界棧緩衝區進行設置。

這個參數設置警戒棧緩衝區的大小。警戒棧緩衝區可以保護程序,防止棧溢出對數據造成破壞。

stacksize參數在線程創建之前創建,用來修改創建的線程棧的大小,但是最小不能低於 PTHREAD_STACK_MIN (16384) bytes ,即16k內存大小,也就是4個內存頁(4個內存頁這一點由內核決定)。

這個參數負責指定子線程需要允許的函數,這個參數需要的是一個函數指針。

這個參數負責指定,子線程所運行的函數的參數值。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237216.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:04
下一篇 2024-12-12 12:04

相關推薦

  • 三星內存條參數用法介紹

    本文將詳細解釋三星內存條上面的各種參數,讓你更好地了解內存條並選擇適合自己的一款。 一、容量大小 容量大小是內存條最基本的參數,一般以GB為單位表示,常見的有2GB、4GB、8GB…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python input參數變量用法介紹

    本文將從多個方面對Python input括號里參數變量進行闡述與詳解,並提供相應的代碼示例。 一、基本介紹 Python input()函數用於獲取用戶輸入。當程序運行到inpu…

    編程 2025-04-29
  • Spring Boot中發GET請求參數的處理

    本文將詳細介紹如何在Spring Boot中處理GET請求參數,並給出完整的代碼示例。 一、Spring Boot的GET請求參數基礎 在Spring Boot中,處理GET請求參…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29

發表回復

登錄後才能評論