线程数量控制
来源:互联网 发布:sql中自定义变量 编辑:程序博客网 时间:2024/04/30 14:49
Semaphore类:
Semaphore有着一些我们已经知道的特性:
- 你可以创建没有名称的“局部”信号量,也可以创建命名的“全局”信号量用于跨应用程序域的同步。
- 你可以用WaitOne()请求一个资源。
- 你需要使用try/finally结构调用“Close()”,确保信号量资源在使用后被正确释放。
- 你仍然需要注意在全局情况下Semaphore的访问安全问题。
总的来说,Semaphore与Mutex更像是兄弟,仍然与EventWaitHandle一脉不太亲近:
- Semaphore从机制上来说跟Mutex一样属于“锁”而不是“通知”,因此跟Mutex一样几乎没有“通知”的能力。
- 举个不恰当但是很形象的例子,Semaphore就是一个可以多次进入的“Mutex”。Mutex永远只允许一个线程拥有它,而Semaphore可以允许多个线程请求,因此Semaphore被用于管理一次可以允许多个线程进入并发访问资源的情况。之所以说“不恰当”,是因为一旦允许多个线程访问资源,那么这时候的资源一定不是互斥资源,相应的代码段也不再是“临界区”。
- 因为Semaphore与Mutex在请求数量上的不同,因此他们的线程相关性是不同的。这一点,Semaphore到跟EventWaitHandle一样,它是线程无关的。也就是说对Semaphore地释放者可以不定是Semaphore的拥有者。比如说我可以是消费者线程总使用WaitOne()请求线程池中的资源从来不需要释放,而生产者总是Release线程池中的资源而从来不请求。
- Semaphore使用Release()来表示对资源的释放,不过与ReleaseMutex()不同,这个函数有重载方法允许你指定释放几个资源。这引发了一个问题,如果Release的次数超过资源总量,那么会引发SemaphoreFullException异常。比如线程A和线程B都进入信号量。如果线程B中发生了一个编程错误,导致它调用Release()两次(或者Release(2)),则两次调用都会成功。这样,信号量的计数就已经达到了最大值,所以,当线程A最终调用Release时将引发异常。这相当于本来资源中只有N个资源,最后却有超过N个资源被还回来。
- 记得使用完以后调用Close()释放信号量资源。
- 线程的数量控制
- 线程数量控制
- 线程池控制并发数量
- python自定义线程池控制线程数量
- RenderScript控制并行化线程数量
- GCD并发线程数量控制技术
- C#中的多线程-线程同步基础 (控制线程数量)
- C#中的多线程-线程同步基础 (控制线程数量)
- C#中的多线程-线程同步基础 (控制线程数量)
- Java中怎么控制线程访问资源的数量
- Java并发库(十四):控制线程访问数量Semaphore
- 控制SQL返回数量
- Spark控制ReduceTask数量
- map任务数量控制
- 倒计时控制数量传递
- 控制并发数量
- 并发工具类(三)控制并发线程的数量 Semphore
- IOCP线程数量
- 用Debug函数实现API函数的跟踪(2)
- poj3356
- Duff's device神奇的switch
- 2010长沙的夏天
- 《Windows核心编程》のWindows时间
- 线程数量控制
- OpenGL Tessellation【转】
- 浪潮通软Erp_gs8.5数据迁移步骤
- 开发了一款无需编程的控制器
- 特征向量的几何含义
- 收割者
- 新博客
- SOJ 3664 chess towers 【完全背包变形】
- 用Debug函数实现API函数的跟踪(3)