starnet 阅读(1030) 评论(1)

信号量是一个很好用的内核对象,用来控制对一些资源的访问,比如可以用来控制缓冲区块的数量!

为了保证系统的性能,常常要保证一定数量的空闲缓冲区的存在。这可以通过信号量来实现:

假设系统要求空闲缓冲区块的数量要时刻保证在10个左右,这样系统可以有很好的效率。那么我们可以设定信号量可以控制的资源数为一个比较大的值,比如1000,当前值为10。当线程使用缓冲区块致使可用资源数量降到一个边界值比如5时,此线程可以负责把缓冲区的数量增加到10,避免其它线程做同样的真正申请缓冲区的操作,这可以通过调用ReleaseSemaphore来实现。当线程ReleaseSemaphore的过程中发现当前空闲资源的数量超过一个边界值,不如15,那么此线程可以减少缓冲区块的数量到10,同时使信号量的当前值减少到10,通过循环调用WaitForSingleObject来实现!

刚看了一下信号量的内容,作此设想!不成熟之处还请指正,比如线程都只申请不释放怎么办,哈哈!


发表评论
切换编辑模式