多執行緒程式設計(1)

2021-06-18 17:03:10 字數 3591 閱讀 6685

一  建立執行緒

函式:

handle createthread(

lpsecurity_attributeslpthreadattributes

,// sddworddwstacksize

,// initial stack sizelpthread_start_routinelpstartaddress

,// thread functionlpvoidlpparameter

,// thread argumentdworddwcreationflags

,// creation optionlpdwordlpthreadid

// thread identifier);

引數:
lpthreadattributes  一般為null null使用預設安全性,不可以被子執行緒繼承,否則需要定義乙個結構體將它的binherithandle成員初始化為true

dwstacksize      設定初始棧的大小,以位元組為單位,如果為0,那麼預設將使用與呼叫該函式的執行緒相同的棧空間的大小

lpstartaddress      執行緒函式的指標

lpparameter         給執行緒函式傳送的引數指標,可謂結構體指標,物件指標

lpthreadid            用於儲存新執行緒的id

返回值:

返回建立執行緒的控制代碼 handle 型別

執行緒函式寫法:

dword winapi threadproc(

lpvoidlpparameter

// thread data);

二  建立臨界物件
函式1:
handle createmutex(

lpsecurity_attributeslpmutexattributes

,// sdboolbinitialowner

,// initial ownerlpctstrlpname

// object name);

引數:
lpmutexattributes  執行緒的安全性,如果是null 則執行緒不能被繼承
binitialowner      建立該執行緒的執行緒是否擁有該互斥物件
lpname             互斥物件的名字
返回值:
返回互斥物件的控制代碼 handle
函式2:
dword waitforsingleobject(

handlehhandle

,// handle to objectdworddwmilliseconds

// time-out interval);

引數:
hhandle 用createmutex建立的臨界區物件的控制代碼
dwmilliseconds   定時時間間隔,單位為milliseconds(毫秒).如果指定乙個非零值,函式處於等待狀態直到hhandle標記的物件被觸發,或者時間到了。如果dwmilliseconds為0,物件沒有被觸發訊號,函式不會進入乙個等待狀態,它總是立即返回。如果dwmilliseconds為infinite,物件被觸發訊號後,函式才會返回。
呼叫後 需要呼叫bool releasemutex(

handlehmutex

// handle to mutex);函式 釋放控制代碼

互斥物件 擁有乙個使用數量 和 乙個執行緒id ,和乙個計數器
在乙個執行緒中呼叫waitforsingleobject  在另乙個執行緒中releasemutex 釋放的互斥物件 不是同乙個,因為互斥物件的執行緒id表示那個想成呼叫的互斥物件
在使用互斥物件時 如果呼叫兩次waitforsingleobject 需呼叫兩次releasemutex 才可以,否子計數器為2,release一次 計數器為1,互斥物件仍為無訊號狀態
#include#includeusing namespace std;

dword winapi fun1proc(lpvoid lpparameter);

dword winapi fun2proc(lpvoid lpparameter);

int ticks = 100;

handle hmutex;

void main()

{ handle handle1;

handle handle2;

handle1 = createthread(null,0,fun1proc,null,0,null);

handle2 = createthread(null,0,fun2proc,null,0,null);

closehandle(handle1);

closehandle(handle2);

hmutex = createmutex(null,false,text("tickets"));

if(hmutex)

{ if( error_already_exists == getlasterror())

{ cout<<"only one running"<0 )

cout<<"thread1 sell ticke"<0 )

cout<<"thread2 sell ticke"<

多執行緒程式設計1

一,建立執行緒和退出執行緒 在linux系統中,所有與執行緒相關的函式都是以pthread開頭的。pthread create函式用於在當前程序中加入新的執行緒。linux系統中線程的建立與unix系統存在著不同。在linux系統中,當呼叫pthread create函式來建立執行緒時,系統首先先建...

多執行緒程式設計 1

為了以後忘記以後可以再看,所以記錄下.程式開始後將有乙個主線程,即 thread.currentthread乙個簡單的示例,阻塞當前執行緒 這裡建立了2個執行緒,然後呼叫start方法啟動執行緒.修改上面程式,阻塞第1個執行緒 可以看到兩個執行緒互不影響 我想能不用執行緒就不要用,因為執行緒很複雜....

多執行緒程式設計1

管理執行緒的函式和類在 thread 中宣告,而保護共享資料的函式和類在其他標頭檔案中宣告 每個執行緒都必須有乙個初始函式,新執行緒的執行從這裡開始。對於應用程式來說,初始執行緒是main 但是對於其他執行緒,可以在std thread物件的建構函式中指定,本例中,被命名為t的std thread物...