C 多執行緒程式設計

2021-08-03 19:58:07 字數 2480 閱讀 7444

建立執行緒

在windows平台,windows api提供了對多執行緒的支援。

createthread用於建立乙個執行緒,其函式原型如下:

handle winapi createthread(

lpsecurity_attributes lpthreadattributes, //執行緒安全相關的屬性,常置為null

size_t dwstacksize, //新執行緒的初始化棧大小,可設定為0,表示和主線程棧的大小一樣, 如果不夠用會自動增長

lpthread_start_routine lpstartaddress, //執行緒函式

lpvoid lpparameter, //傳入執行緒函式的引數,不許傳遞引數時為null

dword dwcreationflage, //啟動選項,0:執行緒建立後立即執行入口函式;create_suspended:執行緒建立後會掛起等待

lpdword lpthreadid //傳出引數,用於獲得執行緒id,如果為null,則不返回執行緒id

); 其中執行緒函式的原型如下:

dword winapi threadproc(lpvoid lpparameter); //lpparameter是傳入的引數,是乙個空指標

【demo1】簡單多執行緒例項

#include

#include

using

namespace

std;

dword winapi funproc(lpvoid lpparameter);

int index=0;

void main()

dword winapi funproc(lpvoid lpparameter)

執行結果如圖所示:

執行緒同步

使用互斥量進行執行緒同步時會用到一下3個函式:

handle winapi createmutex(

lpsecurity_attributes lpmutexattributes, //執行緒安全相關屬性,常置為null

bool binitialowner, //建立mutex時的當前執行緒是否擁有mutex的所有權

lpctstr lpname //mutex的名稱

); dword winapi waitforsingleobject(

handle hhandle; //要獲取的鎖的控制代碼

dword dwmilliseconds //超時間隔,一般為infinite,表示無限等待,知道等待的物件處於非占用的狀態

); bool winapi releademutex(handle hmutex); //釋放所擁有的互斥量鎖物件,hmutex為釋放的互斥量的控制代碼

【demo2】模擬火車售票系統

#include

#include

using

namespace

std;

#define name_lire 40

dword winapi funproc(lpvoid lpparameter);

int tickets=100;

handle hmutex;

typedef

struct __thread_data

}thread_data;

void main()

}//建立執行緒

handle hthread1=createthread(null,0,funproc,&threaddata1,0,null);

handle hthread2=createthread(null,0,funproc,&threaddata2,0,null);

handle hthread3=createthread(null,0,funproc,&threaddata3,0,null);

closehandle(hthread1);

closehandle(hthread2);

closehandle(hthread3);

waitforsingleobject(hmutex,infinite);

releasemutex(hmutex);

releasemutex(hmutex);

sleep(4000);

system("pause");

}//執行緒的入口函式

dword winapi funproc(lpvoid lpparameter)

return

0;}

部分結果如下圖所示:

C 多執行緒程式設計

一 thread 基礎 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式 方...

C 多執行緒程式設計

乙個程序通常定義為程式的乙個例項。在win32中,程序佔據4gb的位址空間。與它們在ms dos和16位windows作業系統中不同,win32程序是沒有活力的。這就是說,乙個win32程序並不執行什麼指令,它只是佔據著4gb的位址空間,此空間中有應用程式exe檔案的 和資料。exe需要的任意dll...

C 多執行緒程式設計

建立執行緒的函式 handle createthread lpsecurity attributes lpthreadattributes,使用預設安全形態,設為null,表明不可被子執行緒繼承 size t dwstacksize,初始棧大小,預設值0表示使用與呼叫該函式的執行緒相同的棧大小 lp...