五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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)遵守國家法律
湘西| 湘潭市| 丰城市| 宝丰县| 井冈山市| 农安县| 盐源县| 从化市| 郴州市| 修水县| 安乡县| 合肥市| 博兴县| 建湖县| 梁河县| 容城县| 永济市| 广德县| 岚皋县| 西宁市| 湘潭市| 汉中市| 周至县| 班戈县| 丁青县| 永福县| 长丰县| 益阳市| 简阳市| 吐鲁番市| 洪湖市| 海兴县| 大姚县| 揭西县| 香河县| 云安县| 衡水市| 垦利县| 偏关县| 邵阳县| 于田县|