c語言管理線程,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-tw/n/154568.html

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

相關推薦

  • 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
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python線程等待指南

    本文將從多個方面詳細講解Python線程等待的相關知識。 一、等待線程結束 在多線程編程中,經常需要等待線程執行完畢再進行下一步操作。可以使用join()方法實現等待線程執行完畢再…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python兩個線程交替列印1到100

    這篇文章的主題是關於Python多線程的應用。我們將會通過實際的代碼,學習如何使用Python兩個線程交替列印1到100。 一、創建線程 在Python中,我們可以使用Thread…

    編程 2025-04-28

發表回復

登錄後才能評論