zoukankan      html  css  js  c++  java
  • C#多线程——同步

    多个线程(不仅仅局限于相同进程)如果需要访问相同的可变资源的话就可能需要考虑到线程同步的手段。CPU的线程和进程管控我这里就不去说了,计算机组成原理里面的东西

    那么既然要让线程的步调一致,那么我们首先可以想到的是,如果一个线程没有完成我们就等,一直等到它完成,但是这种方法会耗费CPU的资源

    Stopwatch sw = Stopwatch.StartNew();
    Thread t1 = new Thread(() =>
    {
    Thread.Sleep(1000);
    result = 100;
    });
    t1.Start();
    Thread.Sleep(500);
    while (t1.IsAlive) ;
    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.WriteLine(result);

    除了这种方式,还可以做轮询的方式,因为傻傻的等实在是太浪费资源了,那么我们每次都去检查一下线程是不是在跑就行了

    Stopwatch sw = Stopwatch.StartNew();
    Thread t1 = new Thread(() =>
    {
    Thread.Sleep(1000);
    result = 100;
    });
    t1.Start();
    Thread.Sleep(500);
    while (t1.IsAlive)
    Thread.Sleep(500);
    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.WriteLine(result);

    另外就是使用join的方式进行阻塞

    Stopwatch sw = Stopwatch.StartNew();
    Thread t1 = new Thread(() =>
    {
    Thread.Sleep(1000);
    result = 100;
    });
    t1.Start();
    Thread.Sleep(500);
    t1.Join();
    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.WriteLine(result);

    然后再看看锁的用法吧,锁在线程里面用的还是蛮多的,除非你用线程池进行多线程管控,相对而言的话锁还是很好的处理机制,让线程按照顺序依次执行

    Stopwatch sw = Stopwatch.StartNew();
    Thread t1 = new Thread(() =>
    {
    lock (locker)
    {
    Thread.Sleep(1000);
    result = 100;
    }
    });
    t1.Start();
    Thread.Sleep(100);
    lock (locker)
    {
    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.WriteLine(result);
    }
  • 相关阅读:
    设置linux session 编码
    在masterpage中添加对usercontrol的引用
    首页的sitecontent地址
    iis的路径
    设置repeater每行多少个的方法
    updatepannel的使用
    取caml查询结果的前多少行
    设置视频自动播放
    网站集与网站
    notepad++ 死机 找到没保存的文件
  • 原文地址:https://www.cnblogs.com/yinxuejunfeng/p/9693141.html
Copyright © 2011-2022 走看看