• 多线程同步技术(二)


    5.Semaphore

    Semaphore是同一时间允许几个进程同时获取共享资源的,如下例:

    static void Main()
            {
    
                for (int i = 0; i < 6; i++)
                {
                    Console.WriteLine("=========={0}===========",i);
                    Thread t= new Thread(() => {
                        Proc("Thread"+i,i*1000);
                    });
                    Console.WriteLine("=========={0}===========", i);
                    t.Start();
                }
    
                Console.Read();
            }
            static Semaphore sem = new Semaphore(2, 2);
            static void Proc(string name,int secs)
            {
                Console.WriteLine("{0} wait to access",name);
                sem.WaitOne();
                Console.WriteLine("{0} get access",name);
                Thread.Sleep(secs);
                Console.WriteLine("{0} complete", name);
                sem.Release();
            }

    image

    新建立了6个线程,设置最多只有2个线程,每次只有2个线程可以获取资源,等到这个两个线程执行完毕,释放了线程锁,然后余下的线程可以继续获取锁执行;


    6.AutoResetEvent && ManualResetEvent

    static void Main()
            {
                AutoResetEvent ae = new AutoResetEvent(false);//false无信号,当调用的时候是阻塞的
                ManualResetEvent me = new ManualResetEvent(false);
                //AutoResetEvent 执行完之后会自动把把信号量关闭,必须为下面的线程开信号量,下面的线程才可以获取到信号量
                //ManualResetEvent 执行完之后不会把信号量关闭,下面的线程可以继续获取工作
                new Thread(() => {
                    Console.WriteLine("Thread1 entry");
                    //ae.WaitOne();
                    me.WaitOne();
                    Console.WriteLine("Thread1 exit");
                    //ae.Set();//释放信号
                }).Start();
    
                new Thread(() => {
                    Console.WriteLine("Thread2 entry");
                    //ae.WaitOne();
                    me.WaitOne();
                    Console.WriteLine("Thread2 exit");
                }).Start();
                //ae.Set();//释放信号
                me.Set();
                Console.Read();
            }
    image
  • 相关阅读:
    python笔记第十一天 模块补充
    python笔记第十天 模块
    python笔记第九天 装饰器
    python笔记第八天 迭代器与生成器
    python笔记第七天 文件操作
    python笔记第六天 函数和函数的内置方法
    C语言----指针形参(指向指针的指针形参)
    NEON使用方法
    ARM NEON指令集总结
    三维变换矩阵左乘和右乘分析
  • 原文地址:https://www.cnblogs.com/yeshuimaowei/p/7459177.html
Copyright © 2020-2023  润新知