概念:
信号量代表某一类资源,其值表示系统中该资源的数量
信号量是一个受保护的变量,只能通过三种操作来访问
初始化
P操作:申请资源
V操作:释放资源
信号量P/V操作
if (信号量的值大于0)(申请资源的任务继续运行; 信号量的值减一;
else( 申请资源的任务阻塞;} V(s)含义如下:
信号量的值加一;if (有任务在等待资源) {唤醒等待的任务,让其继续运行}
三种信号灯
posix 有名信号灯
posix 无名信号灯
system V信号灯
#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
sem_t *sem_r,*sem_w;
key_t key;
int shmid;
char *shmaddr;
key = ftok(".",100);
if(key< 0)
{
perror("ftok");
return 0;
}
shmid = shmget(key,500,06666|IPC_CREAT);
if(shmid<0){
perror("shmget");
return 0;
}
shmaddr = shmat(shmid,NULL ,0);
sem_r = sem_open("mysem_r",O_CREAT|O_RDWR,0666,0);
sem_w = sem_open("mysem_w",O_CREAT|O_RDWR,0666,1);
while(1){
sem_wait(sem_w);
printf(">");
fgets(shmaddr,500,stdin);
sem_post(sem_r);
}
}