zoukankan      html  css  js  c++  java
  • .net 多线程同步的相关知识点

    在多线程开发中,共享对象的同步是经常遇到的问题,以下总结了C#中线程同步的几种技术:

    1,InterLocked原子操作

    Decrement(ref int location);递减1

    Add(ref int location1, int value);location1+value

    Increment(ref int location);递增1

    2,Mutex互斥锁

    WaitOne(int timeout);等待获取锁

    ReleaseMutex();释放锁,记得一定要释放,否则永远被阻塞

    3,SemaphoreSlim信号量

    SemaphoreSlim(int count);允许的并发线程数量

    Wait();等待

    Release();释放

    4,AutoRestEvent自动重置时间(内核模式)

    Set();从一个线程向另一个线程发送通知;

    WaitOne();等待通知

    5,ManaulResetEventSlim手动重置时间(混合模式)

    Wait();等待

    Set();通知

    Reset();重置

    6,CountDownEvent计数事件

    CountdownEvent(int count);通知计数

    Signal();计数(线程完成一定调用)

    Wait();等待

    Dispose();释放

    7,Barrier

    Barrier(int participantCount, Action<Barrier> postPhaseAction);多个线程同步,回调Action

    SignalAndWait();执行回调

    8,ReaderWriterLockSlim读写锁

    EnterReadLock();获取读锁(可共享读)

    ExitReadLock();释放读锁

    EnterUpgradeableReadLock();获取读锁(可升级到写锁);

    ExitUpgradeableReadLock();释放升级读锁

    EnterWriteLock();获取写锁(其他线程不可读写)

    ExitWriteLock();释放写锁

    9,SpinWait自旋等待(混合模式)

    SpinOnce();自旋

  • 相关阅读:
    [剑指 Offer 18. 删除链表的节点]
    [922. 按奇偶排序数组 II]
    [905. 按奇偶排序数组]
    Linux信号机制
    [1470. 重新排列数组]
    linux常用命令全称
    pidof查看服务的PID
    运行shell脚本提示syntax error near unexpected token `$'do ''
    influxdb安装
    jvm堆内存设置问题Java heap space、GC overhead limit exceeded
  • 原文地址:https://www.cnblogs.com/l1pe1/p/8302920.html
Copyright © 2011-2022 走看看