c 之執行緒總結 一

2022-02-18 13:55:52 字數 3854 閱讀 9104

在我們做專案的時候會經常用到執行緒,但執行緒也不是萬能的,用執行緒需要注意的東西也很多,自己做了一下總結

這次總結主要說三個部分

1 執行緒之委託方法

2 給執行緒傳參

3 三種方法控制線程同步

我們先看一下小例子:

在方法裡我們定義了乙個 threadstart _ts = new threadstart(mythread);

開啟msdn 檢視發現這是乙個委託 ,表示在 thread上執行的方法。

[comvisible(true)]

public delegate void threadstart();

那就是說也可以這麼寫

thread _thread2 = new thread(delegate()

});//或者

thread _thread3 = new thread(()=>

});_thread2.start();

_thread3.start();

thread類有乙個帶引數的委託型別的過載形式

[comvisibleattribute(false)] 

public

delegate

void parameterizedthreadstart (

object obj

)可以傳遞乙個object引數,因為是個委託我們也可以和上面的那麼寫

class program

);_thread2.start("bbb");

console.writeline("other metod");

console.readline();

}public static void myparametfun(object f_str)

}

有時個我們有好幾個引數只傳乙個引數據就不能滿足了

我們可以直接用委託要多個引數

也可以自己寫乙個中間類

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading;

namespace threadmethod

}public class mymode

public mymode(int f_x,string f_str1,string f_str2)

public void consofun()}}

三種方法lock 和monitor 還有methodimpl都會讓執行緒同步下面我們乙個乙個的來說

多個執行緒訪問同乙個方法時有可能會出現乙個執行緒修改了乙個引數別乙個執行緒進入也修改了這個引數就會發生

錯誤

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading;

namespace threadmethod

public static void confun()

console.writeline(sum);

}}

}

結果是

根據機器的配製不同可能結果也不同

在這個方法裡我們是想讓第乙個執行緒減10結果應該 是145

第二個執行緒進去後在145基礎上再減結果應該是90

現在說三種方法lock 和monitor 還有methodimpl 都會讓執行緒同步,只有乙個執行緒執行完後另乙個執行緒才能訪問

我們乙個乙個來說吧

先看一下lock

這樣結果就對了吧

還有其它的兩種形式

用methodimpl  要加上

結果都是正確的

c 之執行緒基礎 一

可以認為執行緒是乙個虛擬程序,用於獨立執行乙個特定的程式。1.使用c 建立執行緒 using system using system.threading 3 namespace mutithreaddemo 4static void printnumber 在上面的 中,步驟4定義了方法 print...

C 之入門總結 程序,執行緒 14

當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。process pro process.getprocesses 通過程序開啟一些應用程式 process.start calc process.start iexplor...

C 執行緒總結

using system using system.collections.generic using system.diagnostics using system.linq using system.text using system.threading namespace guoqingxun...