国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

c# 為什么不用while循環(huán)等待標(biāo)志量,而用重置事件呢? AutoResetEvent / ManualReset

2023-04-06 10:22 作者:大衣哥編程  | 我要投稿
  • 利用while循環(huán)等待標(biāo)志量實(shí)現(xiàn)多線程同步, cpu占用率極高

    bool is_ok = false;
    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? while(!is_ok)
    ??????????????? {
    ??????????????????? Console.WriteLine("thread 1...");
    ??????????????? }
    ?????????????? ?
    ??????????? });

    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? while (!is_ok)
    ??????????????? {
    ??????????????????? Console.WriteLine("thread 2...");
    ??????????????? }

    ??????????? });
    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? while (!is_ok)
    ??????????????? {
    ??????????????????? Console.WriteLine("thread 3...");
    ??????????????? }

    ??????????? });

    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? Console.WriteLine("thread 4 set before.");
    ??????????????? Thread.Sleep(5000);
    ??????????????? is_ok = true;
    ??????????????? Console.WriteLine("thread 4 set after.");
    ??????????? });

  • 利用AutoResetEvent:一次喚醒一個(gè)線程,cpu占用率低

    private static AutoResetEvent event_ = new AutoResetEvent(false);
    ??????? static void Main(string[] args)
    ??????? {
    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? event_.WaitOne();
    ??????????????? Console.WriteLine("thread 1...");
    ??????????? });

    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? event_.WaitOne();
    ??????????????? Console.WriteLine("thread 2...");
    ??????????? });

    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? Console.WriteLine("thread 3 set before.");
    ??????????????? Thread.Sleep(5000);
    ??????????????? Console.WriteLine("thread 3 set after.");
    ??????????????? event_.Set();?? // 一次只能喚醒一個(gè)線程
    ??????????? });

  • 利用 ManualReset:一次喚醒所有線程,cpu占用率低

    private static ManualResetEvent event_ = new ManualResetEvent(false);

    ??????? static void Main(string[] args)
    ??????? {
    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? event_.WaitOne();
    ??????????????? Console.WriteLine("thread 1...");
    ??????????? });

    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? event_.WaitOne();
    ??????????????? Console.WriteLine("thread 2...");
    ??????????? });
    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? event_.WaitOne();
    ??????????????? Console.WriteLine("thread 3...");
    ??????????? });

    ??????????? Task.Run(() =>
    ??????????? {
    ??????????????? Console.WriteLine("thread 4 set before.");
    ??????????????? Thread.Sleep(5000);
    ??????????????? Console.WriteLine("thread 4 set after.");
    ??????????????? event_.Set();?? // 一次只能喚醒一個(gè)線程
    ??????????? });


c# 為什么不用while循環(huán)等待標(biāo)志量,而用重置事件呢? AutoResetEvent / ManualReset的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
象山县| 娄烦县| 垫江县| 汤原县| 陵水| 揭阳市| 修武县| 阳春市| 中方县| 巫溪县| 乐平市| 东城区| 正阳县| 阳西县| 湟中县| 高陵县| 商洛市| 阳山县| 溧水县| 荆门市| 吉林市| 峨边| 重庆市| 宁安市| 招远市| 右玉县| 兴安县| 如皋市| 德清县| 巩义市| 黑河市| 衡水市| 涟源市| 闽侯县| 定边县| 封丘县| 南陵县| 孝义市| 浦东新区| 苏尼特右旗| 石阡县|