信号量同步编程
信号量同步
一。核心概念
进程同步核心概念:一组并发进程进行互相合作,互相等待,使得各进程按一定的顺序执行的过程
称为进程间的同步。
二。生产力消费问题
(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)加入同步控制
信号量控制把同步进行任务完成