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
超级会员免费看
订阅专栏 解锁全文
2545

被折叠的 条评论
为什么被折叠?



