信号量同步
一。核心概念
进程同步核心概念:一组并发进程进行互相合作,互相等待,使得各进程按一定的顺序执行的过程
称为进程间的同步。
二。生产力消费问题
(1)问题描述
(2)问题程序化
#include <sys/types.h>
#include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.h>void main()
{ int fd; int semid; struct sembuf sops; key_t key; key = ftok("/home",2); /*创建信号量*/ semid = semget(key,1,IPC_CREAT); semctl(semid,0,SETVAL,0); /*创建产品-文件*/ fd = open("./product.txt",O_RDWR|O_CREAT,0775); /*休息*/ sleep(20); /*向产品文件里面填充内容*/ write(fd,"the product is finished",25); close(fd); /*释放信号量*/ sops.sem_num = 0; sops.sem_op = 1; sops.sem_flg = SEM_UNDO; semop(semid,&sops,1); }/******************************************/
#include <stdlib.h>
#include <sys/ipc.h> #include <sys/sem.h> #include <sys/types.h> #include <stdio.h>void main()
{ int fd; int semid; int ret; struct sembuf sops; key_t key; key = ftok("/home",2); /*创建信号量*/ semid = semget(key,1,IPC_CREAT); /*获取信号量*/ sops.sem_num = 0; sops.sem_op = -1; sops.sem_flg = SEM_UNDO; ret = semop(semid,&sops,1); printf("val = %d\n",ret); /*取走产品文件*/ system("cp ./product.txt ./ship/"); }(3)加入同步控制
信号量控制把同步进行任务完成