您的位置:首页 > 编程语言

信号量同步编程

2015-04-27 16:29 204 查看
1.核心概念-进程同步

一组并发进程进行互相合作,互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。

2.生产者消费者问题

/* producter.c */

#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;
key_t key;
int semid;
struct sembuf sops;

key = ftok("/root",2);

/* 创建信号量 */
semid = semget(key,1,IPC_CREAT);
/* 设置信号量初始值为0 */
semctl(semid,0,SETVAL,0);

/* 创建产品-文件 */
fd = open("./product.txt",O_RDWR|O_CREAT,0775);
/* 休息 */
sleep(20);
/* 向产品文件填充内容 */
write(fd,"the product is finished",23);
close(fd);

/* 释放信号量 */
sops.sem_num = 0;
sops.sem_op = 1;
sops.sem_flg = SEM_UNDO;
semop(semid,&sops,1);
}
/* customer.c */

#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

void main()
{
key_t key;
int semid;
struct sembuf sops;

key = ftok("/root",2);
semid = semget(key,1,IPC_CREAT);

/* 获取信号量 */
sops.sem_num = 0;
sops.sem_op = -1;
sops.sem_flg = SEM_UNDO;
semop(semid,&sops,1);

/* 取走产品文件 */
system("cp ./product.txt ./ship/");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息