C幾個執行緒同時呼叫方法會出問題嗎

2022-06-10 16:26:56 字數 2900 閱讀 4554

1樓:

看你的方法與全域性變數或者某一物件有沒有關係, 如果有, 那麼結果肯定是錯的, 如果沒有全域性變數和物件, 只是處理返回計算結果的話, 那麼沒有問題

2樓:匿名使用者

如果f()只是個單純c#方法,他是不會搞錯輸入輸出的對應關係的.

但你這f()是個裝置操作方法.是否會搞錯就要取決於裝置和裝置驅動程式了,這點你要到設別廠商那去確認.

如果裝置沒用分辨輸入輸出對的能力,那麼只加鎖就行了

3樓:匿名使用者

不會,電腦都是用時序來完成資料的處理,但如果f()方法處理時間長了,會引起執行緒的卡頓!

4樓:虎用

那要看你這個方法裡面有沒有公共靜態變數的相關修改了。

如果沒有修改公共靜態變數,就不會。

5樓:匿名使用者

如果f是一個向終端傳送命令的方法,那麼這裡是否會出錯就和儀器有著非常大的關聯了

這裡的核心問題在於a執行緒先發起請求,並開始等待f()給予返回,儀器此時處理a執行緒發來的請求,a執行緒處於等待階段,那麼如果b執行緒在這個時候進行請求,b執行緒傳送給f()的請求是否會影響a執行緒的結果。

這在於儀器是否支援多請求併發

如果支援,那麼可以使用這樣的非同步請求方式

如果不支援,那麼需要做執行緒同步

j**a如何開啟兩個執行緒後同時呼叫一個類的方法

6樓:匿名使用者

呼叫一個類的方法,不是可以直接呼叫嗎?只是要注意這個方法是否修改了一個兩個執行緒都要用到的變數。

在c#中如何使用多執行緒,每隔幾秒去執行一個方法?

7樓:匿名使用者

////// 簡單的 執行緒執行的 方法.

////// 這個方法是 靜態的

///public static void threadfunc()", count);}}

////// 啟動執行緒的**.

///public static void startthread()全部的例子**看下面的帖子

8樓:太陽之子

現在vs2008一般不用執行緒,大家都使用委託1、委託程式

private void writelog(string content)

2、委託手柄

delegate void writeloghandle(string content);

3、委託使用方法

this.invoke(new writeloghandle(writelog),new object);

然後放一個時鐘控制元件,迴圈去執行方法(3)就行了

9樓:

引入名稱空間

using system.threading;

然後使用thread物件呼叫方法

例如do

while(條件)

10樓:

窗體有timer,執行緒也有自己timer類。

你使用執行緒的timer類就可以實現了。

c#中多個執行緒呼叫同一個方法,方法的變數是公有變數,怎樣進行方法的呼叫使各個執行緒互不影響。

11樓:匿名使用者

最簡單的方法,把這個變數加鎖,或者把函式方法加鎖,使其同一時間只能被一個執行緒呼叫。

但這樣犧牲了效率,所以首先你還是得思考以下問題:

1.這個變數值會被其他執行緒改變嗎?

如果1的回答是否定的,那麼執行緒之間應該不會受影響如果是肯定的,思考問題:

2.一定要在其他執行緒中改變這個變數嗎?

如果是否定的,考慮使用臨時變數或者區域性變數代替原變數如果肯定的,還是考慮加鎖吧

暫時想到這麼多,歡迎補充:)

12樓:匿名使用者

公有變數(我的理解是全域性變數)一定會造成影響,如果不想影響,把公有變數改為方法中的區域性變數

13樓:

在方法中進行變數訪問時加入鎖。簡單的使用lock,或是根據實際情況使用讀寫鎖。

然後建議設定變數(應該是欄位吧)為私有。外部需要訪問的話使用只讀屬性進行訪問。

j**a 兩個執行緒同時呼叫一個類裡的同一個方法,這樣會出現什麼情況?有沒有問題?

c#操作多執行緒的問題,有5個執行緒同時執行,如何判斷5個執行緒均已執行完畢,最好2.0的,別的也將就!

14樓:

這個需求有很多方法可以實現,給你一個最簡單的方法的例子:

using system;

using system.threading;

public class threaddemoconsole.writeline("i'm finished all works on my hand. you can do something else.

");// some other works.

}static void work()

}輸出:

hello, i'm going to do some time-consuming work...

working...

working...

working...

working...

working...

i'm finished all works on my hand. you can do something else.

你還可以通過訊號量等機制實現執行緒同步, 具體可以自己google

c多執行緒問題,C 多執行緒問題

你引數是通過指標的方法送進去的?然後結果每個執行緒要讀資料的時候資料已經不是送入時候的資料了嗎 送執行緒引數的時候,為每個執行緒分配一個新的空間來儲存這個 引數 例如你原來是 int a 10 a 20 現在要int a 10 int p new int p a beginthreadex 0,0,...

C執行緒問題

不需要很安全的話 設定form類的checkforillegalcrossthreadcalls屬性為false 這個東西的話在vs2005裡面預設不允許由子執行緒呼叫主線,2003裡面是預設允許的 所以很多事例 都是2003版本,用2005編譯會報錯 先刪掉msdn原文,難找,礙事 補充 如果只是...

c中如何讓 主執行緒 等待 子執行緒終止

建立一個主物件,有發出的執行緒數 分配執行緒時確定,並在分配時確定每個執行緒guid 已完成的執行緒數 初始為0 異常的執行緒數 初始為0 以及 事件 待處理的連結串列集合 應含有guid值 等。每個子執行緒完成時都會觸發一個完成事件或異常事件,主物件捕獲這個事件,並比對guid,並且將已完成的執行...