none
執行緒執行一問? RRS feed

  • 問題

  • 1.  想問一下假設要執行YorN()2次,但是怕YorN()執行太久所以想把它寫成執行緒讓他能一起同時各別做,寫成像下面這樣是OK的嗎?

    (有用ParameterizedThreadStart寫 , 會依傳入值不同有不同答案)

    2.  如果我的主程式必須等他們2個做完才能得到我所需要的值那我加上join等他們2個都做完才輪到主程式做,那這樣會不會變成跟沒用執行緒一樣阿?因為也是在等待..


    public class aa
        {
            public static void Main(string[] args)
            {
                //.....
                //.....
                //.....
                Thread newThread1 = new Thread(aa.YorN);
                Thread newThread2 = new Thread(aa.YorN);
                newThread1.Start(10);
                newThread2.Start(20);
               
                newThread1.join();  /// 問題2加入
                newThread2.join();  /// 問題2加入

                //////等他們2個做完得到的值,做比對的判斷式
               .......
               .......
               .......
            }

            public static void YorN(object data)
            {
                //.....
                //.....
                //.....           
            }
        }

    2009年8月1日 上午 09:49

解答

  • 在理論上是, 不過當執行緒太多, 有可能反而會變慢, 所有的情況必需要實測才能知道, 而且在每個不同電腦的結果可能也會有所不同. 旦在執行緒不是很多的狀態下, 應該是正面的. 我想這應該沒有人可以給你個肯定的答案.

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    • 已標示為解答 Q楓仔Q 2009年8月2日 上午 01:59
    2009年8月1日 下午 01:27
    版主

所有回覆

  • 是的,因為 Join 會封鎖目前執行緒。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年8月1日 下午 12:54
  • 還是有點差異, 如果你用單緒, 那就是 1做完, 再做 2 ...起碼用多緒感覺上可以讓1和2稍微快一點. 不過執行緒也不能用太多, 這和電腦本身的運算能力還是有關, 用的太多可能會適得其反.
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    2009年8月1日 下午 12:59
    版主
  • 所以把他寫成執行緒還是能讓他們同時一起做,比用單執行緒要等1做完才做2來的有效率一點嗎?

    2009年8月1日 下午 01:16
  • 在理論上是, 不過當執行緒太多, 有可能反而會變慢, 所有的情況必需要實測才能知道, 而且在每個不同電腦的結果可能也會有所不同. 旦在執行緒不是很多的狀態下, 應該是正面的. 我想這應該沒有人可以給你個肯定的答案.

    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    • 已標示為解答 Q楓仔Q 2009年8月2日 上午 01:59
    2009年8月1日 下午 01:27
    版主