zoukankan      html  css  js  c++  java
  • C# 异步锁

    • 使用SemaphoreSlim 实现
      • 当多个任务或线程并行运行时,难以避免的对某些有限的资源进行并发的访问。可以考虑使用信号量来进行这方面的控制(System.Threading.Semaphore)是表示一个Windows内核的信号量对象。如果预计等待的时间较短,可以考虑使用SemaphoreSlim,它则带来的开销更小。.NetFrameWork中的信号量通过跟踪进入和离开的任务或线程来协调对资源的访问。信号量需要知道资源的最大数量,当一个任务进入时,资源计数器会被减1,当计数器为0时,如果有任务访问资源,它会被阻塞,直到有任务离开为止。
        如果需要有跨进程或AppDomain的同步时,可以考虑使用Semaphore。Semaphore是取得的Windows 内核的信号量,所以在整个系统中是有效的。它主要的接口是Release和WaitOne,使用的方式和SemaphoreSlim是一致的。
    private static readonly SemaphoreSlim _mutex = new SemaphoreSlim(1);
    
            static int _value;
    
            public async static Task DelayAndIncrementAsync()
            {
                await _mutex.WaitAsync();
                try
                {
                    var oldValue = _value;
                    await Task.Delay(TimeSpan.FromSeconds(oldValue));
                    Console.WriteLine(_value);
                    _value = oldValue + 1;
    
                }
                catch (Exception ex)
                {
    
                    Console.WriteLine(ex.Message);
                }
                finally
                {
    
                    _mutex.Release();
                }
            }
    
    
  • 相关阅读:
    QT自定义信号和槽
    C++中深入理解dynamic_cast
    C++中rapidxml用法
    VS2015 创建C++动态库及使用
    C++ 已知两个时间(年月日)求日期差
    Electron 打开开发者工具 devtools
    NSIS安装或卸载时检查程序是否正在运行
    sqlite3 读写锁
    CEF 远程调试
    linux缩减分区空间,用以安装win系统
  • 原文地址:https://www.cnblogs.com/Alicia-meng/p/13330640.html
Copyright © 2011-2022 走看看