一个同步的例子

今天上操作系统的时,老师讲到进程同步提到售票系统,记得以前看孙鑫老师的视频时也提到过类似的东西。回来后马上动手,用C#实现了一个简单的进程同步。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Threading;

public class ThreadCreat
{
    
static int tickets = 100//没有全局变量,静态变量也一样
    
//为了使进程同步,需要一个监视器来阻止第二个线程进入一个受保护的代码段
    readonly static object _Sync = new object(); 
    
public static void ThreadProc1()
    {

      
//  Interlocked.Decrement(ref tickets); //这里不知道是什么,网上提供的方法,但是没用

        
while (true)
        {  
            Monitor.Enter(_Sync);
                
try
                {
                    
if (tickets > 0)
                    {
                       Thread.Sleep(
1);       
                       Console.WriteLine(
"thread 1 sell:titck leave {0} ", tickets--);        
                    }
                    
else
                        
break;
                }
                
finally
                {
                    Monitor.Exit(_Sync);
                }
       }
    }

    
public static void ThreadProc2()
    { 
        
while (true)
        {
        
//    Interlocked.Decrement(ref tickets);
              Monitor.Enter(_Sync);
            
try
                {
                   
if (tickets > 0)
                   {
                        Thread.Sleep(
1);  
                        Console.WriteLine(
"thread 2 sell:titck leave {0} ", tickets--);
                   } 
                   
else
                      
break;
                } 
            
finally
                {
                    Monitor.Exit(_Sync);
                }
              }
      }

    
public static void Main()
    {
        
//这里使用的是C#2.0的委托推断语法,不是显示地实例化ThreadStart
        Thread thread1 = new Thread(new ThreadStart(ThreadProc1));
        thread1.Start();

        Thread thread2 
= new Thread(new ThreadStart(ThreadProc2));
        thread2.Start();

         
//   Console.WriteLine("Main thread: do some work.");
        Thread.Sleep(4000);
        Console.ReadLine();
    }
    
}

累了,先睡觉。

转载于:https://www.cnblogs.com/kulong995/archive/2008/10/10/1307952.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值