最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)遵守國家法律
石泉县| 渑池县| 城固县| 敦煌市| 北辰区| 浦县| 太康县| 滦南县| 登封市| 潼关县| 平江县| 古交市| 沽源县| 枞阳县| 林州市| 佛学| 锡林浩特市| 汶上县| 吉隆县| 马公市| 阿合奇县| 巴林左旗| 赤城县| 秦安县| 淄博市| 澄迈县| 潜山县| 大悟县| 定远县| 无极县| 宿州市| 高邑县| 徐闻县| 建瓯市| 甘泉县| 潜江市| 河源市| 肥西县| 绥芬河市| 新安县| 和顺县|