zoukankan      html  css  js  c++  java
  • c# 线程信号量 Mutex

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Threading;
    
    namespace MyTTCon
    {
        class shareRes
        {
            public static int count = 0;
            public static Mutex mutex = new Mutex();
        }
    
        class IncThread
        {
            int number;
            public Thread thrd;
            public IncThread(string name, int n)
            {
                thrd = new Thread(this.run);
                number = n;
                thrd.Name = name;
                thrd.Start();
            }
            void run()
            {
                Console.WriteLine(thrd.Name + "正在等待 the mutex");
                //申请
                shareRes.mutex.WaitOne();
                Console.WriteLine(thrd.Name + "申请到 the mutex");
                do
                {
                    Thread.Sleep(1000);
                    shareRes.count++;
                    Console.WriteLine("In " + thrd.Name + "ShareRes.count is " + shareRes.count);
                    number--;
                } while (number > 0);
                Console.WriteLine(thrd.Name + "释放 the nmutex");
                //  释放
                shareRes.mutex.ReleaseMutex();
            }
        }
        class DecThread
        {
            int number;
            public Thread thrd;
            public DecThread(string name, int n)
            {
                thrd = new Thread(this.run);
                number = n;
                thrd.Name = name;
                thrd.Start();
            }
            void run()
            {
                Console.WriteLine(thrd.Name + "正在等待 the mutex");
                //申请
                shareRes.mutex.WaitOne();
                Console.WriteLine(thrd.Name + "申请到 the mutex");
                do
                {
                    Thread.Sleep(1000);
                    shareRes.count--;
                    Console.WriteLine("In " + thrd.Name + "ShareRes.count is " + shareRes.count);
                    number--;
                } while (number > 0);
                Console.WriteLine(thrd.Name + "释放 the nmutex");
                //  释放
                shareRes.mutex.ReleaseMutex();
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                IncThread mthrd1 = new IncThread("IncThread thread ", 5);
                DecThread mthrd2 = new DecThread("DecThread thread ", 5);
                mthrd1.thrd.Join();
                mthrd2.thrd.Join();
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    读取文本文件中的中文打印到Eclipse控制台为何显示问号
    使用StringUtils需要引用的依賴
    Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
    AngularJS快速入门指南15:API
    国外社交网站获取分享数量APIs
    AngularJS快速入门指南14:数据验证
    AngularJS快速入门指南13:表单
    AngularJS快速入门指南12:模块
    AngularJS快速入门指南11:事件
    AngularJS快速入门指南10:DOM节点
  • 原文地址:https://www.cnblogs.com/kexb/p/6087363.html
Copyright © 2011-2022 走看看