C 多執行緒程式設計

2021-05-22 11:58:41 字數 2208 閱讀 9345

一、thread 基礎

程序:  當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。

執行緒:  執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器(棧指標、程式計數器等),但**區是共享的,即不同的執行緒可以執行同樣的函式(方法)。

多執行緒: 多執行緒是指程式中包含多個執行流,即在乙個程式中可以同時執行多個不同的執行緒來執行不同的任務,也就是說允許單個程式建立多個並行執行的執行緒來完成各自的任務。

二、 多執行緒

優點:可以提高cpu的利用率。在多執行緒程式中,乙個執行緒必須等待的時候,cpu可以執行其它的執行緒而不是等待,這樣就大大提高了程式的效率。

缺點:執行緒也是程式,所以執行緒需要占用記憶體,執行緒越多占用記憶體也越多;

多執行緒需要協調和管理,所以需要cpu時間跟蹤執行緒;

執行緒之間對共享資源的訪問會相互影響,必須解決競用共享資源的問題;

執行緒太多會導致控制太複雜,最終可能造成很多bug;

三、控制線程的類和方法

類:using system.threading; thread類

thread類的方法:start():   啟動執行緒;

sleep(int):靜態方法,暫停當前執行緒指定的毫秒數;

abort():    通常使用該方法來終止乙個執行緒;

suspend(): 該方法並不終止未完成的執行緒,它僅僅掛起執行緒,以後還可恢復;

resume():  恢復被suspend()方法掛起的執行緒的執行。

priority    列舉設定執行緒的優先順序,由高到低 highest,abovenormal,normal,belownormal,lowest;系統預設為threadpriority.normal 

在例項化thread的例項,需要提供乙個委託,在例項化這個委託時所用到的引數是執行緒將來啟動的方法。在.net中提供了兩種啟動執行緒的方式,一種是不帶引數的啟動方式,另一種是帶引數的啟動方式。

1.不帶引數的啟動方式

在大型快取的時候我們會經常會用執行緒,當前程式去快取中提取資料,開啟另乙個執行緒判斷當前的快取資料是否過期,是否需要從資料庫提取最新資料。

定義性別的列舉

//////

姓名列舉

///

enum

person***typeenum

定義person 類,成員

internal

class

person

//////

年齡///

public

intage 

//////

生日月份

///

public

intbirthmonth 

//////

性別///

public

person***typeenum ***;

//////

人///

public

person person }

thread

public

class

mythread}

//////

不帶引數

///

public

void

persontostring()

2.這裡我們介紹帶引數的啟動方法

如果要在例項化執行緒時要帶一些引數,就不能用threadstart委託作為建構函式的引數來例項化thread了,而要parameterizedthreadstart委託,和threadstart 一樣的是也是執行緒啟動時要執行的方法,和threadstart不同的是,他在例項化時可以用乙個帶有object引數的方法作為建構函式的引數,而例項化threadstart時所用到得方法是沒有引數的。

static

void

main(

string

args)

帶引數的方法  

//////

傳遞乙個object

///

///

public

void

persontostring(

object

obj)}

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...

C 多執行緒程式設計

c 的多執行緒不同於c語言的多執行緒,對於我這個從c轉向c 的來說更是覺得很難理解 來新公司的這段時間也是一直在思考這方面的事情,近期一直在檢查程式中死鎖的問題 就總結以下最近對於c 多執行緒程式設計的心得吧。c 的多執行緒主要體現在兩方面,一方面是對於全域性資料的執行緒同步。我們看下面的例項 首先...