Posix信号量的实现与应用
1. sem - wait函数
sem - wait函数的代码如下:
3 int 4 serf - wait(serf - t *serf) 5 { 6 char c; 7 if (sem->serf - magic != SEM - M?iGIC) { 8 errno = EINVAL; 9 return (-1); 10 } 11 if (read(sem->sem - fd[0], &c, 1) == 1) 12 return (0); 13 return (-1); 14 }该函数从FIFO中读取1个字节的数据,如果FIFO为空则会阻塞。目前尚未实现sem - trywait和sem - getvalue函数。对于sem - trywait函数,可以通过启用FIFO的非阻塞标志并调用read函数来实现;而sem - getvalue函数,有些实现会在调用stat或fstat函数时返回管道或FIFO中当前的字节数,但这并非由Posix保证,因此不具有可移植性。
2. 使用内存映射I/O的实现
2.1 semaphore.h头文件
1 /* the fundamental datatype */ 2 typedef struct { 3 pthread - mutex_t sem - mutex; /* lock to test and set sem