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

  • 相关阅读:
    查询数据库中的相同值得所有表跟字段【存储过程】
    一些常用的SQL语句
    添加网站本地映射
    ReSharper 2016.3.2 Ultimate 官方最新破解版
    C# 利用VS自带的WSDL工具生成WebService服务类
    Linux环境下docker搭建wordpress应用
    Appium环境搭建
    内联以及外联css,js文件的理解
    前端雅虎23条理解
    docker安装和使用
  • 原文地址:https://www.cnblogs.com/wucg/p/2359085.html
Copyright © 2011-2022 走看看