線程同步有很多種方式,如果只是共享整型數據,可以使用Interlocked進行同步。
下面給出一個例子,來說明如何利用Interlocked進行同步。
1 int sum = 0;2 Parallel.For(1, 10001, i =>3 {4 sum += 1;5 });6 tbContent.Text = "結果:" + sum;
看上面這段代碼,經過10000次并行循環后,預期sum變量最后的值為10000。然而,由于資源沖突的原因,sum最后的值并不確定,多數情況小于10000。
可以有很多種方式來進行同步,比如專門用一個object對象同步。不過,這里我們使用Interlocked來進行同步,代碼如下:
1 int sum = 0;2 Parallel.For(1, 10001, i =>3 {4 Interlocked.Increment(ref sum);5 });6 tbContent.Text = "結果:" + sum;
運行一下,sum每次運行的值都為10000。
新聞熱點
疑難解答