Chinaunix首页 | 论坛 | 博客
  • 博客访问: 245817
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 273
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-27 23:34
个人简介

To follow the path,look to the master,follow the master.

文章分类

全部博文(35)

文章存档

2019年(1)

2018年(1)

2017年(1)

2016年(8)

2015年(24)

分类: C/C++

2015-09-10 18:22:37

临界资源:多个进程/线程访问资源。
互斥:在同一时间只有并仅有一个进程/线程访问临界资源
信号量:
posix:
无名信号量 线程
int sem_init(sem_t *sem, int pshared, unsigned int value)
初始化信号量
sem:创建信号量
pshared: !0=进程间使用 0=线程使用
value:信号量初值 2

int sem_wait(sem_t *sem)
lock  value=value-1

临界资源操作

int sem_post(sem_t *sem)
unlock value=value+1

int sem_unlink(const char *name)

有名信号量:
sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag,
            mode_t mode, unsigned int value)
int sem_wait(sem_t *sem)//上锁
lock  value=value-1

临界资源操作

int sem_post(sem_t *sem)//解锁
unlock value=value+1

int sem_unlink(const char *name)

system V:

int semget(key_t key, int nsems, int semflg)
创建信号量集
key:名称
nsems:信号量集中信号量的个数
semflg:属性IPC_CREAT IPC_EXCL

int semop(int semid, struct sembuf *sops, unsigned nsops)
操作信号量 lock unlock
semid:semget()返回值
sops:
struct sembuf
{
    unsigned short sem_num; //0~(nsems-1)
    short          sem_op;  //-1 +1
    short          sem_flg;  /* operation flags */SEM_UNDO
}
nsops:

int semctl(int semid, int semnum, int cmd, ...)
获取/设置信号量集中某个信号量属性
semid:
semnum:
cmd:SETVAL(初值) GETVAL IPC_RMID
阅读(1735) | 评论(0) | 转发(0) |
0

上一篇:APUE IPC机制(三)共享内存

下一篇:I2C接口

给主人留下些什么吧!~~