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

首頁 > 學院 > 開發設計 > 正文

線程系列08,實現線程鎖的各種方式,使用lock,Montor,Mutex,Semaphore以及線程死鎖

2019-11-17 02:52:15
字體:
來源:轉載
供稿:網友

線程系列08,實現線程鎖的各種方式,使用lock,Montor,Mutex,Semaphore以及線程死鎖

當涉及到多線程共享數據,需要數據同步的時候,就可以考慮使用線程鎖了。本篇體驗線程鎖的各種用法以及線程死鎖。主要包括:

※ 使用lock處理數據同步※ 使用Monitor.Enter和Monitor.Exit處理數據同步※ 使用Mutex處理進程間數據同步※ 使用Semaphore處理數據同步※ 線程死鎖

□ 使用lock處理數據同步

假設有一個類,主要用來計算該類2個字段的商,在計算商的方法之內讓被除數自減,即被除數有可能為零。使用lock語句塊保證每次只有一個線程進入該方法。

    class ThreadSafe
    {
        static readonly object o = new object();
        PRivate static int _val1, _val2;
        public ThreadSafe(int val1, int val2)
        {
            _val1 = val1;
            _val2 = val2;
        }
        public void Calculate()
        {
            lock (o)
            {
                --_val2;
                if (_val2 != 0)
                {
                    Console.WriteLine(_val1/_val2);
                }
                else
                {
                    Console.WriteLine("_val2為零");
                }
                
            }
        }
    }

○ new object()創建的對象實例,也被稱作同步對象○ 同步對象必須是引用類型○ 同步對象通常是私有的、靜態的

客戶端有一個靜態字段val2被ThreadSafe的2個實例方法共用。

    class Program
    {
        private static int val2 = 2;
        static void Main(string[] args)
        {
            ThreadSafe ts1 = new ThreadSafe(2, val2);
            ThreadSafe ts2 = new ThreadSafe(2, val2);
            Thread[] threads = new Thread[2];
            threads[0] = new Thread(ts1.Calculate);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏东市| 金寨县| 靖远县| 齐河县| 剑河县| 枝江市| 寿阳县| 镇平县| 台东县| 孟津县| 黔西| 文水县| 昌平区| 永定县| 芦溪县| 同德县| 新野县| 黄陵县| 塔河县| 张家界市| 蕲春县| 禄丰县| 永靖县| 五寨县| 土默特左旗| 文水县| 长岭县| 洞口县| 正安县| 铜梁县| 沾化县| 阳泉市| 富平县| 龙州县| 灵宝市| 合山市| 合江县| 高唐县| 章丘市| 博野县| 汉阴县|