Chinaunix首页 | 论坛 | 博客

分类: LINUX

2012-10-08 18:38:00

    IPC:Inter-Process Communication,进程间通信
    信号量:在多任务操作系统环境下,多个进程会同时运行,并且一些进程之间可能存在一定的关联。多个进程可能为了完成同一个任务互相协作,这样形成进程之间的同步关系。而且在不同的进程之间,为了争夺有限的系统资源(硬件或软件资源),会进入竞争状态,这就是进程之间的互斥关系。
    信号量是用来解决进程之间的同步与互斥问题的一种进程间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。

使用信号量步骤:
1. 创建信号量或获得在系统中已经存在的信号量,此时需要调用semget()函数。不同进程通过使用同一个信号量键值来获取同一个信号量。
2. 初始化信号量,此时使用semctl()函数的SETVAL操作。
3. 进行信号量的PV操作,此时调用semop()函数。
4. 如果不需要信号量,则从系统中删除它,此时使用semctl()函数的IPC_RMID操作。

int semget(key_t key, int nsems, int semflg);
nsems:代表信号量个数,通常为1,表示只有一个信号量;如果大于1,表示是一个信号量集。

int semctl(int semid, int semnum, int cmd, ...);
semnum:信号量编号,通常取值为0,表示使用第一个信号量。

int semop(int semid, struct sembuf *sops, unsigned nsops);
struct sembuf {
           unsigned short sem_num;  /* semaphore number */
           short          sem_op;   /* semaphore operation */
           short          sem_flg;  /* operation flags */
}
sem_op = -1 : P操作  sem_op = 1 : V操作

例子: sem_test.zip  

                       ——忠于梦想 勇于实践    linux_xpj@opencores.org
阅读(938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~