none
用 Parallel.For, 區域變數出錯 RRS feed

  • 問題

  • double d1, d2, d3;
    d1 = 0.26431465;
    d2 =1.0566156462165468;
    d3 = 0.0;            
    
    
    string txText = "";
                string txLabel = "";
                Parallel.For<double>(1, 30000, () => 0, (i, loop, subtotal) =>
                {
                    double tempResult = ((d1 * i * d2 * 5.14513165411) / 0.003853);
                    //d3 += tempResult;
                    txText += i.ToString() + ": " + tempResult.ToString() + Environment.NewLine;               
                    txLabel = i.ToString();
                                   subtotal += tempResult;
                    return subtotal;
                }, 
                (x) => Interlocked.Add(ref d3, x) //只接受 long, 不接受 double
                );


    問題有 2 個

    1) 發覺 txText 得 8xxx 條, 而不是 30000 (貼上 excel 查看)

    2) InterLock 無法接受 double type, 是否不能解決呢? 若使用 d3 += tempResult;

    http://msdn.microsoft.com/zh-tw/library/dd460703.aspx

    3) 一般來說, 要怎樣處理 "同時" 存取的變數呢? 我只想到把它們全都放入List<> , 然後相加, 但失去了平行的意義

    • 已編輯 asp.coder 2011年12月22日 下午 12:16
    2011年12月22日 下午 12:04

解答

所有回覆