计数信号量也是一种锁,它可以让用户限制一项资源最多能够同时被多少个进程访问,计数信号量和锁的区别在于,当客户端获取锁失败时,通常会选择等待;而当客户端获取计数信号量失败时,通常会选择立即返回失败结果。下面模拟一下,最多同时只允许5个进程同时访问一个资源。
构建基本的计数信号量
构建计数信号量时要考虑的事情和构建其他类型的锁时要考虑的事情大部分都是相同的,比如判断时哪个客户端取得了锁,如何处理客户端在获得锁之后奔溃的情况,以及如何处理锁超时的问题。为了使多个信号量持有者的信息都存储到同一个结构里面,将使用有序集合来构建计数信号量。就是为每个尝试获取信号量的进程生成一个唯一标识符,将这个标识符用作有序集合的成员,对应的分值是尝试获取信号量时的Unix时间戳。