本文共 1186 字,大约阅读时间需要 3 分钟。
进程同步:一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。如生产者与消费者问题,这是操作系统关于同步的一个经典问题。生产者生产产品,而消费者必须在生产者生产完毕后才能使用产品。
同步的关键是设置资源的信号量初始值为0,生产者执行完所有指令后释放该资源,即令其信号量变成1,使其能够被其它进程使用;消费者只获取信号量而不释放。 生产者进程A:创建信号量并设置初始值为0,然后生产,生产完毕后释放#include#include #include #include #include #include void main(){ int fd=open("/home/jx/myfile",O_RDWR|O_APPEND|O_CREAT,0777); key_t key=ftok("/home/jx/myfile",1); /*创建键值*/ int semid=semget(key,1,IPC_CREAT); /*创建信号量集合,获取标示符*/ semctl(semid,0,SETVAL,0);/*设置信号量初始值*/ struct sembuf sop; struct sembuf *sops=&sop; write(fd,"hello ",6); sleep(10); write(fd,"world!",6); close(fd); /*释放信号量*/ sops->sem_num=0; sops->sem_op=1; sops->sem_flg=SEM_UNDO; semop(semid,sops,1);}
消费者进程B:获取信号量并使用资源
#include#include #include #include void main(){ key_t key=ftok("/home/jx/myfile",1); /*创建键值*/ int semid=semget(key,1,IPC_CREAT); /*创建信号量集合,获取标示符*/ /*获取信号量*/ struct sembuf sop; struct sembuf *sops=&sop; sops->sem_num=0; sops->sem_op=-1; sops->sem_flg=SEM_UNDO; semop(semid,sops,1); system("cp /home/jx/myfile /home/jx/myfile1");}
转载地址:http://amigi.baihongyu.com/