麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

C#多線程的坑之代碼變序

2019-11-14 16:50:01
字體:
供稿:網(wǎng)友

英文好的,可跳過,直接打開底部的“參考“鏈接。

 

代碼變序--reordering of memory Operations

大概4年前,閱讀了這篇文章后http://www.albahari.com/threading/,我就自我滿足,多線程編程不過就是用那些工具而已。

今天,讀了一篇文章后,http://msdn.microsoft.com/en-us/magazine/jj863136.aspx,才發(fā)現(xiàn)C#代碼是可以變序的(上面的文章也提到了,忘得一干二凈)。

舉例,你寫出如下的代碼

  1. void Init() {
  2.   _data = 42;
  3.   _initialized = true;
  4. }

JIL運(yùn)行時的代碼卻可以像這樣(不是IL代碼哦,IL編譯出代碼與源代碼是一致的)

  1. void Init() {
  2.   _initialized = true;
  3.   _data = 42;
  4. }

這個坑爹的JIL優(yōu)化,如果不注意,可能就不會抓住bug所在。底部有我寫的再現(xiàn)方法。先別運(yùn)行程序,試試猜猜結(jié)果有幾種可能。

 

 

總結(jié):浮躁+記憶力差是很致命的,必須要找適合自己的工作方式。深入理論上理解+上手驗證,這樣才算消化,也不容易忘。

不重復(fù)造輪子,更不能重復(fù)學(xué)習(xí)。

參考:

http://msdn.microsoft.com/en-us/magazine/jj863136.aspx

http://msdn.microsoft.com/en-us/magazine/jj883956.aspx

    class PRogram    {        static void Main(string[] args)        {            DataInit di = new DataInit();            new Thread(() => { di.Init(); }) { IsBackground = true }.Start();            new Thread(() => { di.Print(); }) { IsBackground = true }.Start();            Console.WriteLine("Running... Press enter to quit");            Console.ReadLine();        }    }    public class DataInit    {        private int _data = 0;        private bool _initialized = false;        //準(zhǔn)備些無用的field            private char _c = '0';            private int _data1 = 0;            private int _data2 = 0;            private int _data3 = 0;            private int _data4 = 0;        public void Init()        {            _data = 42;            // Write 1            _initialized = true;   // Write 2            //下面的field賦值是用來觸發(fā)JIL 優(yōu)化的,如何觸發(fā)的原理,我不知道:(。            ///*try屏蔽下面的代碼,結(jié)果很可能就是42了                _c = '0';                _data1 = 0;                _data = 0;                _data2 = 0;                _data3 = 0;                _data4 = 0;        }        public void Print()        {            Console.WriteLine(_data);               Console.WriteLine(_initialized);             if (_initialized)            {                Console.WriteLine(_data); //should 42,有時候確是0            }            else            {                Console.WriteLine("Not initialized");            }        }    }

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人啪啪18免费网站 | 一区二区免费看 | 亚洲特黄妇女高潮 | 国产剧情在线观看一区二区 | 中国漂亮护士一级a毛片 | 免费黄色欧美视频 | jizzjizzjizz少妇| 爱逼爱操综合网 | 亚洲自拍第一 | 亚洲乱操 | 久国久产久精永久网页 | 国产激情视频在线 | 欧美成人小视频 | 欧美日韩亚洲精品一区二区三区 | 亚洲国产女同久久 | 国产精品视频二区不卡 | 热99视频 | 国内精品一级毛片免费看 | 在线观看免费污视频 | 97香蕉超级碰碰久久免费软件 | 欧美日韩精品一区二区三区蜜桃 | 亚洲综合91| 爱操在线 | av成人一区二区 | 国产呦在线观看视频 | 激情在线免费观看 | 精品亚洲一区二区三区 | 草操视频 | 国产精品7区 | 午夜精品一区二区三区免费 | 成人黄色小视频在线观看 | 欧美成人精品一区二区三区 | 成人在线网站 | 91精品久久香蕉国产线看观看 | h视频在线免费观看 | 香蕉国产在线视频 | 激情国产视频 | 精品一区二区三区日本 | 日韩精品一区二区三区中文 | 成人在线精品视频 | 九九热视频这里只有精品 |