最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#多線程之間的排他鎖的實現(xiàn)

 更新時間:2021年08月18日 11:40:32   作者:蘇飛論壇  
我們很多時候會碰到這樣的問題,使用多線程刷一個表的數(shù)據(jù)時需要多個線程不能重復(fù)提取數(shù)據(jù),那么這個時候就需要使用到線程的排他鎖了,本文就詳細的介紹一下

我們很多時候會碰到這樣的問題,使用多線程刷一個表的數(shù)據(jù)時需要多個線程不能重復(fù)提取數(shù)據(jù),那么這個時候就需要使用到線程的排他鎖了。

在c#里面其實很簡單,下面先來看一個簡單的小例子

Thread pingTask = new Thread(new ThreadStart(delegate
           {
               //從數(shù)據(jù)庫獲取1000條數(shù)
               var list = getdata();
           }));
 
           //啟動線程
           pingTask.Start();

如果這個時候我們開啟多個線程

代碼如下

for (int i = 0; i < 100; i++)
            {
                Thread pingTask = new Thread(new ThreadStart(delegate
               {
                //從數(shù)據(jù)庫獲取1000條數(shù)
                var list = getdata();
               }));
 
                //啟動線程
                pingTask.Start(); 
            }

那么這100個線程獲取的數(shù)據(jù)可能大部分是重復(fù)的
怎么樣解決這個問題呢,兩種寫法

第一種寫法使用this

private List<company> getdata()
        {
            lock (this)
            {
//提取數(shù)據(jù)
 
                return list;
            }
        }

這種寫法當(dāng)線程執(zhí)行到這一步時所有線程都會停止執(zhí)行,等待執(zhí)行完成

我們再來看第二種

object obj=new object()
       private List<company> getdata()
       {
           lock (obj)
           {
               List<ckb_com> list = ckbbll.FindList($" com_id >={index} and com_id<{index + pagesize}");
               index = index + pagesize;
 
               return list;
           }
       }

這種寫法只會鎖死這個方法,
同時只會有一個線程能執(zhí)行這個方法
大家可以根據(jù)自己的需求來使用

到此這篇關(guān)于c#多線程之間的排他鎖的實現(xiàn)的文章就介紹到這了,更多相關(guān)c#多線程排他鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

石嘴山市| 绥宁县| 云林县| 林州市| 高雄市| 佛教| 新平| 平乐县| 郴州市| 广昌县| 连州市| 上虞市| 景泰县| 镇江市| 察雅县| 江津市| 彭山县| 阿合奇县| 都江堰市| 清涧县| 右玉县| 乌兰县| 林口县| 上高县| 云南省| 大方县| 通道| 张家口市| 莒南县| 林州市| 呈贡县| 萨嘎县| 额尔古纳市| 平邑县| 西平县| 万安县| 弋阳县| 丹东市| 玉龙| 兴宁市| 衢州市|