无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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)遵守國家法律
涿鹿县| 偃师市| 建水县| 石家庄市| 封开县| 乌审旗| 平昌县| 上杭县| 栾城县| 阳新县| 漾濞| 德化县| 平安县| 武强县| 库尔勒市| 凤阳县| 琼海市| 建平县| 池州市| 英山县| 会昌县| 朝阳县| 永靖县| 电白县| 青海省| 潜江市| 赣榆县| 社旗县| 泉州市| 宝山区| 阿拉善盟| 喜德县| 寻甸| 台江县| 保康县| 盐边县| 保德县| 孝昌县| 郁南县| 咸阳市| 金山区|