信号量概念:
1.二值信号量:值为0或者1。若互斥锁就是这种
2.计数信号量:值为0~N之间的信号量
3.计数信号量集:就是一个或多个信号量构成一个集合
System V信号量就是计数信号量集,而Posix信号量则是单个计数信号量
=======================================================
系统中内核维护着每个信号量集,其维护的信息结构如下:
struct semid_ds{
struct ipc_perm sem_perm;//操作权限结构
struct sem* sem_base;//指向信号量集合的指针
ushort sem_nsems;//信号量集合中信号量个数
time_t sem_otime;//上一次semop()操作时间
time_t sem_ctime;//创建时间或者上一次IPC设置的时间
};
struct sem{
ushort_t semval;//信号量值
short sempid;//上次成功操作semop的进程ID
ushort_t semncnt;//等待semval大于当前值的线程数
ushort_t semzcnt;//等待semval等于0的线程数
};
*注意这个结构体是由内核维护的&#