国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

線程系列07,使用lock語句塊或Interlocked類型方法保證自增變量的數(shù)據(jù)同步

2019-11-17 02:52:18
字體:
供稿:網(wǎng)友

線程系列07,使用lock語句塊或Interlocked類型方法保證自增變量的數(shù)據(jù)同步

假設(shè)多個線程共享一個靜態(tài)變量,如果讓每個線程都執(zhí)行相同的方法每次讓靜態(tài)變量自增1,這樣的做法線程安全嗎?能保證自增變量數(shù)據(jù)同步嗎?本篇體驗使用lock語句塊和Interlocked類型方法保證自增變量的數(shù)據(jù)同步。

□ 線程不安全、數(shù)據(jù)不同步的做法

    class PRogram
    {
        static int sum = 0;
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Parallel.For(0, Environment.ProcessorCount, i =>
            {
                for (int j = 0; j < 100000000; ++j)
                {
                    AddOne();
                }
            });
            watch.Stop();
            Console.WriteLine("sum={0},用了{1}", sum, watch.Elapsed);
            Console.ReadKey();
        }
        static void AddOne()
        {
            sum++;
        }
    }

○ 變量sum是靜態(tài)的,供所有線程共享○ Parallel.For提供并行循環(huán), Environment.ProcessorCount表示處理器的處理,如果有4個CPU,就做4組循環(huán)

33

我們發(fā)現(xiàn),結(jié)果不是我們期望的400000000,也就是說,在這種情況下的靜態(tài)變量自增不是線程安全的,換句話說,無法保證共享數(shù)據(jù)的同步。

□ 通過lock語句塊保持數(shù)據(jù)同步

    class Program
    {
        static int sum = 0;
        private static readonly object o = new object();
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Parallel.For(0, Environment.ProcessorCount, i =>
            {
                for (int j = 0; j < 100000000; ++j)
                {
                    AddOne();

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石首市| 梁河县| 星座| 高淳县| 延寿县| 丹棱县| 安阳县| 黄陵县| 孝感市| 定安县| 淳化县| 沐川县| 河东区| 扎兰屯市| 贵南县| 巴中市| 绥芬河市| 嘉祥县| 河津市| 富平县| 扎赉特旗| 同德县| 衡水市| 钦州市| 轮台县| 邳州市| 吉林市| 安阳市| 新建县| 建阳市| 建宁县| 开封县| 许昌市| 鹤峰县| 武隆县| 瑞金市| 陆良县| 兰西县| 韶关市| 浠水县| 册亨县|