zoukankan      html  css  js  c++  java
  • CLR via C# 读书笔记 32 AutoResetEvent ManualResetEvent 和Semaphore

    这三个对象都经常用于线程同步

    下面是一些他们的异同点

    1.当多个线程在等待一个 AutoResetEvent的时候,每次调用AutoResetEvent.Set()方法只会唤醒一个线程

    2.当多个线程在等待一个ManualResetEvent的时候,每次调用ManualResetEvent.Set()方法会唤醒所有等待的线程

    3.当多个线程在等待一个Semaphore的时候,每次调用Semaphore.Release(Int releaseCount)的时候 将唤醒releaseCount个线程

     如果调用的是Semaphore.Release() 那么相当于Semaphore.Release(1);

    4.AutoResetEvent可以多次调用 Set方法,而Semaphore在每次被调用Release方法的时候会计数,如果这个数字超过了最大限制 ,那么会抛出一个SemaphoreFullException(最大数值可以在构造函数中确定 maximumCount)


    using System;
    using System.Threading;

    public sealed class Semaphore : WaitHandle
    {
    public Semaphore(Int32 initialCount, Int32 maximumCount);
    public Int32 Release(); // Calls Release(1); returns previous count
    public Int32 Release(Int32 releaseCount); // Returns previous count
    }
  • 相关阅读:
    Toggle控制窗口的显隐
    碰撞检测(2D&&3D)
    3D空间 圆柱体画线
    鼠标拖动2D物体(图片)
    实现图片的闪烁效果
    UI 2D图片随鼠标旋转
    射线检测(Summary)
    [转]C#静态方法与非静态方法的比较
    获取精灵
    用于切割字符串的方法
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/1880780.html
Copyright © 2011-2022 走看看