C 多執行緒程式設計入門

2021-07-03 21:33:42 字數 2552 閱讀 8227

handle createthread(   

__in sec_attrs securityattributes,

__in ulong stacksize, // initial stack size

__in sec_thread_start startfunction, // thread function

__in pvoid threadparameter, // thread argument

__in ulong creationflags, // creation option

__out pulong threadid // thread identifier

);

在這裡我們只用到了第三個和第四個引數,第三個引數傳遞了乙個函式的位址,也是我們要指定的新的執行緒,第四個引數是傳給新執行緒的引數指標。

#include "stdafx.h"

#include "iostream"

#include

using

namespace

std;

dword winapi func(lpvoid lpparameter)

}int _tmain(int argc, _tchar* argv)

return

0;}

編譯執行發現主線程(_tmain函式)和自定義程序(func函式)是隨機交替進行的;

其中sleep()函式是用來暫停執行緒的執行的,原型如下:

void winapi sleep(   

__in dword dwmilliseconds

);

引數dwmilliseconds單位是毫秒,比如sleep(1000)表示暫停1秒;
根據上述程式**我們知道每當fun函式和main函式輸出內容後就會輸出換行,但是根據執行結果我們看到的確是有的時候程式輸出換行了,有的時候確沒有輸出換行,甚至有的時候是輸出兩個換行。這是什麼原因呢?

將要輸出endl(也就是清空緩衝區並換行,在這裡我們可以不用理解什麼事緩衝區),但此時main函式確得到了執行的機會,此時fun函式還沒有來得及輸出換行就把cpu讓給了main函式,而這時main函式就直接在fun display!後輸出main display!,至於為什麼有的時候程式會連續輸出兩個換行,讀者可以採用同樣的分析方法來分析,在這裡我就不多講了,留給讀者自己思考了。

這涉及到多執行緒的同步問題。對於乙個資源被多個執行緒共用會導致程式的混亂,我們的解決方法是只允許乙個執行緒

擁有對共享資源的獨佔,這樣就能夠解決上面的問題了。

handle createmutex(      

lpsecurity_attributes lpmutexattributes,

bool binitialowner, // initial owner

lpctstr lpname // object name

);

該函式用於創造乙個獨佔資源,第乙個引數我們沒有使用,可以設為null,第二個引數指定該資源初始是否歸屬

建立它的程序,第三個引數指定資源的名稱。

呼叫**示例如下:

handle hmutex = createmutex(null,true,"screen");
這條語句創造了乙個名為screen並且歸屬於建立它的程序的資源。
bool releasemutex(handle hmutex   // handle to mutex);
該函式用於釋放乙個獨佔資源,程序一旦釋放該資源,該資源就不再屬於它了,如果還要用到,需要重新申請得到該資源。申請資源的函式如下:

dword waitforsingleobject(   

handle hhandle, // handle to object

dword dwmilliseconds // time-out interval

);

第乙個引數指定所申請的資源的控制代碼,第二個引數一般指定為infinite,表示如果沒有申請到資源就一直等待該資源,如果指定為0,表示一旦得不到資源就返回,也可以具體地指定等待多久才返回,單位是毫秒。

#include "stdafx.h"

#include "iostream"

#include

using

namespace

std;

handle hmutex;

dword winapi func(lpvoid lpparameter)

}int _tmain(int argc, _tchar* argv)

return

0;}

C 多執行緒程式設計(真實入門!)

1 createthread建立執行緒的過程如下 c 多執行緒程式設計 真實入門!kprogram的部落格 csdn部落格 c 多執行緒程式設計 beginthread 建立執行緒過程如下 c 多執行緒 beginthread 和 beginthreadex xuanyin235的專欄 csdn部落...

Linux 多執行緒程式設計入門

建立執行緒 intpthread create pthread t restrict thread,const pthread attr t restrict attr,void start routine void void restrict arg 引數 thread 輸出執行緒id attr ...

iOS多執行緒程式設計入門

程序 執行緒 區 import inte ce viewcontroller uiviewcontroller end 複製 補充說明 補充一點 如果我們的程式中 出現了多個執行緒競爭同乙個資源的情況,這個時候 我們需要對這個資源進行同步保護 synchronized 讓執行緒處於乙個排隊狀態 當乙...