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();
            }
        }
    }
  • 相关阅读:
    激光打印机基于主机驱动程序、基于 PCL 驱动程序和 PostScript 驱动程序有何区别?
    转贴:打印机语言PostScript和PCL的比较
    编译器相关配置简介
    Graphics View的体系结构
    解决重装Qt后不能编译Examples的问题
    有符号数和无符号数的区别
    51单片机的外设
    AT89S52单片机P3口解惑
    双向端口设计
    AT89s52单片机的掉电测试
  • 原文地址:https://www.cnblogs.com/kexb/p/6087363.html
Copyright © 2011-2022 走看看