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

歡迎光臨散文網(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)遵守國家法律
原平市| 肇源县| 宜昌市| 阿拉尔市| 彰武县| 三原县| 双柏县| 惠来县| 永定县| 额尔古纳市| 灌云县| 大埔区| 垣曲县| 铜陵市| 库尔勒市| 襄樊市| 台安县| 兴义市| 望奎县| 旬邑县| 阜城县| 台山市| 克拉玛依市| 汉川市| 凤山县| 任丘市| 章丘市| 罗甸县| 交城县| 仙桃市| 贡觉县| 开阳县| 托里县| 娄烦县| 浦城县| 常宁市| 潼南县| 边坝县| 临潭县| 关岭| 灵丘县|