(十三)信号量同步编程(转)

 原文链接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/");
}

猜你喜欢

转载自blog.csdn.net/qq_34863439/article/details/89070771
今日推荐