原文链接https://www.cnblogs.com/lvxiaoning/p/4963328.html
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/"); }