zoukankan      html  css  js  c++  java
  • 多线程同步技术(二)

    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
  • 相关阅读:
    名字对战,看看你名字里蕴藏的力量
    趣味小游戏,测试你们做过的傻事
    贪吃蛇小游戏的初步尝试制作
    实现成绩表的初步想法
    结构体的一些小知识点
    慢慢完善-小游戏之推箱子
    よんにち
    さんか表单 框架 样式表和样式表选择器
    Two Day
    One day
  • 原文地址:https://www.cnblogs.com/yeshuimaowei/p/7459177.html
Copyright © 2011-2022 走看看