C# 同步使用总结

同步的简单总结:

1.lock:设置锁定和解除锁定的一种简单方式。

2.Interlocked:用于使变量的简单语句原子化。Interlocked.Increment(ref state):以原子操作的形式递增指定变量的值并存储结果。参数:其值要递增的变量。

   以线程安全的方式递增,递减,交换,取值。 执行速度比较快。

3.Monitor:lock方式被翻译为Monitor类的Enter()方法,Monitor的Exit()方法解除锁定。

             Monitor.TryEnter(obj, 10000, ref lockTaken);  在指定的毫秒数中,尝试获取指定对象上的排他锁,并自动设置一个值,指示是否得到了该锁。
                                                                         参数: obj: 在其上获取锁的对象。 millisecondsTimeout: 等待锁所需的毫秒数。 lockTaken:尝试获取锁的结果,通过引用传递。 输入必须为 false。 如果已获取锁,则输出为 true;否则输出为 false。 即使在尝试获取锁的过程中发生异常,也会设置输出。

4.spinlock结构:如果有大量锁定,且锁定时间总是非常短,spinlock结构就很有用。除了体系结构的区别,spinlock非常类似与monitor。

5.waithandle基类:用于等待一个信号的设置。

       waitone,waitany,waitall.signalorwait(set改变wait返回值,reset不改变)  

6.Mutex:提供多个进程同步访问。只有一个线程能获得互斥访问。var mutex = new Mutex(false, "TestCode",out temp);最初有主线程拥有,互斥名称,获得互斥已存在。操作系统能够识别有名称的互斥。

       mutex继承waithandle,调用waitone获得互斥,ReleaseMutex释放互斥。可通过temp判断是否获得互斥,false未获得。

7.Semaphore:类似于互斥,信号量可由多个线程使用。是一种计数的互斥锁定。

      var semaphore = new SemaphoreSlim(semaphoreCount, semaphoreCount);   同时授予信号量的初始请求数和最大数量。

      semaphore.Wait(600):等待600ms,直到到达最大数量时,返回false。否则返回true。

      semaphore.Release();释放

8.Events类:同互斥和信号量一样,事件也是一个系统范围内的资源同步方法。ManuelResetEvent,AutoResetEvent,ManuelResetEventSilm,CountdownEvent。

     将事件的waithandle进行wait函数调用,同waithandle类,然后事件的set()方法能够释放返回true,reset()方法返回false,wait等方法可以传递时间。

     CountdownEvent类可直接wait()方法,signal()方法释放。CountdownEvent(int cout):cout:收到的signal()调用次数后释放wait方法。

9.Barrier:var barrier = new Barrier(numberTasks + 1); 同时工作的线程,+1表示主线程。barrier.SignalAndWait();等待,barrier.RemoveParticipant();释放

10.ReaderWriterLockSlim:读写锁,写读互斥。还需研究。

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值