c语言调用createthread线程的头文件_易语言API多线程总汇
【thread】 即,線程,是進(jìn)程中某一順序的控制流,在單個程序中同時運行多個線程完成不同工作,稱為多線程。
易語言多線程
理解:進(jìn)程是一個可執(zhí)行程序,由私有虛擬地址空間、代碼、數(shù)據(jù)和其它操作系統(tǒng)資源組成,一個應(yīng)用程序可以有一個或多個進(jìn)程,一個進(jìn)程 可以有一個多個線程,其中一個是主線程。函數(shù)功能 初始化一個臨界資源對象。
【臨界資源】
臨界資源是指每次僅允許一個進(jìn)程訪問的資源。
屬于臨界資源的硬件有打印機、磁帶機等,軟件有消息緩沖隊列、變量、數(shù)組、緩沖區(qū)等。 諸進(jìn)程間應(yīng)采取互斥方式,實現(xiàn)對這種資源的共享。
每個進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)。顯然,若能保證諸進(jìn)程互斥地進(jìn)入自己的臨界區(qū),便可實現(xiàn)諸進(jìn)程對臨界資源的互斥訪問。為此,每個進(jìn)程在進(jìn)入臨界區(qū)之前,應(yīng)先對欲訪問的臨界資源進(jìn)行檢查,看它是否正被訪問。如果此刻該臨界資源未被訪問,進(jìn)程便可進(jìn)入臨界區(qū)對該資源進(jìn)行訪問,并設(shè)置它正被訪問的標(biāo)志;如果此刻該臨界資源正被某進(jìn)程訪問,則本進(jìn)程不能進(jìn)入臨界區(qū)。
在操作系統(tǒng)中,有臨界區(qū)的概念。臨界區(qū)內(nèi)放的一般是被1個以上的進(jìn)程或線程(以下只說進(jìn)程)共用的數(shù)據(jù)。
臨界區(qū)內(nèi)的數(shù)據(jù)一次只能同時被一個進(jìn)程使用,當(dāng)一個進(jìn)程使用臨界區(qū)內(nèi)的數(shù)據(jù)時,其他需要使用臨界區(qū)數(shù)據(jù)的進(jìn)程進(jìn)入等待狀態(tài)。
操作系統(tǒng)需要合理的分配臨界區(qū)以達(dá)到多進(jìn)程的同步和互斥關(guān)系,如果協(xié)調(diào)不好,就容易使系統(tǒng)處于不安全狀態(tài),甚至出現(xiàn)死鎖現(xiàn)象。
【臨界區(qū)】Critical Section
簡介:
不論是硬件臨界資源,還是軟件臨界資源,多個進(jìn)程必須互斥地對它進(jìn)行訪問。每個進(jìn)程中訪問臨界資源的那段代碼稱為臨界區(qū)(Critical Section)(臨界資源是一次僅允許一個進(jìn)程使用的共享資源)。每次只準(zhǔn)許一個進(jìn)程進(jìn)入臨界區(qū),進(jìn)入后不允許其他進(jìn)程進(jìn)入。不論是硬件臨界資源,還是軟件臨界資源,多個進(jìn)程必須互斥地對它進(jìn)行訪問。
多個進(jìn)程中涉及到同一個臨界資源的臨界區(qū)稱為相關(guān)臨界區(qū)。
程序調(diào)度法則:進(jìn)程進(jìn)入臨界區(qū)的調(diào)度原則是:
1、如果有若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),一次僅允許一個進(jìn)程進(jìn)入。
2、任何時候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個。如已有進(jìn)程進(jìn)入自己的臨界區(qū),則其它所有試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待。
3、進(jìn)入臨界區(qū)的進(jìn)程要在有限時間內(nèi)退出,以便其它進(jìn)程能及時進(jìn)入自己的臨界區(qū)。
4、如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出CPU,避免進(jìn)程出現(xiàn)“忙等”現(xiàn)象。線程同步問題:
有多個線程試圖同時訪問臨界區(qū),那么在有一個線程進(jìn)入后其他所有試圖訪問此臨界區(qū)的線程將被掛起(等待),并一直持續(xù)到進(jìn)入臨界區(qū)的線程離開。臨界區(qū)在被釋放后,其他線程可以繼續(xù)搶占,并以此達(dá)到用原子方式操作共享資源的目的。
臨界區(qū)在使用時以CRITICAL_SECTION結(jié)構(gòu)對象保護(hù)共享資源,并分別用EnterCriticalSection()和LeaveCriticalSection()函數(shù)去標(biāo)識和釋放一個臨界區(qū)。所用到的CRITICAL_SECTION結(jié)構(gòu)對象必須經(jīng)過InitializeCriticalSection()的初始化后才能使用,而且必須確保所有線程中的任何試圖訪問此共享資源的代碼都處在此臨界區(qū)的保護(hù)之下。否則臨界區(qū)將不會起到應(yīng)有的作用,共享資源依然有被破壞的可能。
下面通過一段代碼展示了臨界區(qū)在保護(hù)多線程訪問的共享資源中的作用。通過兩個線程來分別對全局變量g_cArray[10]進(jìn)行寫入操作,用臨界區(qū)結(jié)構(gòu)對象g_cs來保持線程的同步,并在開啟線程前對其進(jìn)行初始化。為了使實驗效果更加明顯,體現(xiàn)出臨界區(qū)的作用,在線程函數(shù)對共享資源g_cArray[10]的寫入時,以Sleep()函數(shù)延遲1毫秒,使其他線程同其搶占CPU的可能性增大。如果不使用臨界區(qū)對其進(jìn)行保護(hù),則共享資源數(shù)據(jù)將被破壞,而使用臨界區(qū)對線程保持同步后則可以得到正確的結(jié)果。
【創(chuàng)建多線程許可證】:InitializeCriticalSection
初始化一個臨界資源對象。
參數(shù):
lpCriticalSection 臨界資源對象指針
無返回值
【線程鎖】
EnterCriticalSection; LeaveCriticalSection
多個線程操作相同的數(shù)據(jù)時,一般是需要按順序訪問的,否則會引導(dǎo)數(shù)據(jù)錯亂,無法控制數(shù)據(jù),變成隨機變量。為解決這個問題,就需要引入互斥變量,讓每個線程都按順序地訪問變量。這樣就需要使用EnterCriticalSection和LeaveCriticalSection函數(shù)。
【創(chuàng)建一個線程】CreateThread
當(dāng)使用CreateProcess調(diào)用時,系統(tǒng)將創(chuàng)建一個進(jìn)程和一個主線程。CreateThread將在主線程的基礎(chǔ)上創(chuàng)建一個新線程
庫文件名:kernel32
參數(shù):
lpThreadAttributes:線程屬性(整數(shù)型)
dwStackSize:線程棧大小,如果為0,那么默認(rèn)將使用與調(diào)用該函數(shù)的線程相同的??臻g大小(整數(shù)型)
lpStartAddress:子程序子針型
lpParameter:向線程傳遞的參數(shù)(整數(shù)型)
dwCreationFlags :設(shè)置線程被創(chuàng)建后的狀態(tài),如果為0表示,創(chuàng)建后立即運行,如果為4,表示線程被創(chuàng)建后處于掛起狀態(tài)。
lpThreadId:保存新線程的ID(整數(shù)型)(要傳址)提供一個整數(shù)型變量,用來接收創(chuàng)建成功后的線程ID.線程ID在系統(tǒng)范圍內(nèi)是唯一的.如果不提供,請置0
返回值:
函數(shù)成功,返回線程句柄;函數(shù)失敗返回false。
【關(guān)閉線程句柄】CloseHandle
庫文件名:kernel32說明:關(guān)閉一個內(nèi)核對象。其中包括文件、文件映射、進(jìn)程、線程、安全和同步對象等參數(shù):hObject Long:欲關(guān)閉的一個對象的句柄返回值:Long,非零表示成功,零表示失敗。【線程掛起】SuspendThread
庫文件名:kernel32
參數(shù):hthread
參數(shù)類型:整數(shù)型
【線程恢復(fù)】ResumeThread
【臨界資源對象指針】(多線程許可證)
成員:成員 DebugInfo, 整數(shù)型, , , 調(diào)試信息成員 LockCount, 整數(shù)型, , , 鎖定計數(shù)成員 RecursionCount, 整數(shù)型, , , 遞歸計數(shù)成員 OwningThread, 整數(shù)型, , , 擁有線程成員 LockSemaphore, 整數(shù)型, , , 鎖定信號量成員 SpinCount, 整數(shù)型, , , 自旋計數(shù)總結(jié)
以上是生活随笔為你收集整理的c语言调用createthread线程的头文件_易语言API多线程总汇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sata接口测试软件,如何查看电脑是否支
- 下一篇: 电脑功耗软件_台式电脑配置详解!