zoukankan      html  css  js  c++  java
  • Interlocked 使用

    using System;
    using System.Threading;
    
    namespace InterlockedExchange_Example
    {
        class MyInterlockedExchangeExampleClass
        {
            //0 for false, 1 for true.
            private static int usingResource = 0;
    
            private const int numThreadIterations = 5;
            private const int numThreads = 10;
    
            static void Main()
            {
                Thread myThread;
                Random rnd = new Random();
    
                for (int i = 0; i < numThreads; i++)
                {
                    myThread = new Thread(new ThreadStart(MyThreadProc));
                    myThread.Name = String.Format("Thread{0}", i + 1);
    
                    //Wait a random amount of time before starting next thread.
                    Thread.Sleep(rnd.Next(0, 1000));
                    myThread.Start();
                }
    
                Console.WriteLine("done.");
                Console.ReadKey();
            }
    
            private static void MyThreadProc()
            {
                for (int i = 0; i < numThreadIterations; i++)
                {
                    UseResource();
    
                    //Wait 1 second before next attempt.
                    Thread.Sleep(1000);
                }
            }
    
            //A simple method that denies reentrancy.
            static bool UseResource()
            {
                //0 indicates that the method is not in use.
                if (0 == Interlocked.Exchange(ref usingResource, 1))
                {
                    Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name);
    
                    //Code to access a resource that is not thread safe would go here.
    
                    //Simulate some work
                    Thread.Sleep(500);
    
                    Console.WriteLine("{0} exiting lock", Thread.CurrentThread.Name);
    
                    //Release the lock
                    Interlocked.Exchange(ref usingResource, 0);
                    return true;
                }
                else
                {
                    Console.WriteLine("   {0} was denied the lock", Thread.CurrentThread.Name);
                    return false;
                }
            }
    
        }
    }
    

      

    http://msdn.microsoft.com/zh-cn/library/system.threading.interlocked.aspx

  • 相关阅读:
    Java编程之路相关书籍
    JAVA中的Random()函数
    在鼠标右键上加入使用notepad++编辑
    更改IE浏览器的收藏夹位置
    Java四类八种数据类型
    成为Java顶尖程序员 ,看这11本书就够了
    面向对象(多异常的声明与处理)
    面向对象(异常try-catch)
    面向对象(异常概述)
    面向对象(局部内部类和匿名内部类)
  • 原文地址:https://www.cnblogs.com/wucg/p/2359085.html
Copyright © 2011-2022 走看看