信号量同步编程

进程同步:一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。如生产者与消费者问题,这是操作系统关于同步的一个经典问题。生产者生产产品,而消费者必须在生产者生产完毕后才能使用产品。
同步的关键是设置资源的信号量初始值为0,生产者执行完所有指令后释放该资源,即令其信号量变成1,使其能够被其它进程使用;消费者只获取信号量而不释放。
生产者进程A:创建信号量并设置初始值为0,然后生产,生产完毕后释放

#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=open("/home/jx/myfile",O_RDWR|O_APPEND|O_CREAT,0777);
    key_t key=ftok("/home/jx/myfile",1); /*创建键值*/
    int semid=semget(key,1,IPC_CREAT); /*创建信号量集合,获取标示符*/
    semctl(semid,0,SETVAL,0);/*设置信号量初始值*/
    struct sembuf sop;
    struct sembuf *sops=&sop;

    write(fd,"hello ",6);
    sleep(10);
    write(fd,"world!",6);
    close(fd);
    /*释放信号量*/
    sops->sem_num=0;
    sops->sem_op=1;
    sops->sem_flg=SEM_UNDO;
    semop(semid,sops,1);
}

消费者进程B:获取信号量并使用资源

#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<stdlib.h>
void main()
{
    key_t key=ftok("/home/jx/myfile",1); /*创建键值*/
    int semid=semget(key,1,IPC_CREAT); /*创建信号量集合,获取标示符*/
    /*获取信号量*/
    struct sembuf sop;
    struct sembuf *sops=&sop;
    sops->sem_num=0;
    sops->sem_op=-1;
    sops->sem_flg=SEM_UNDO;
    semop(semid,sops,1);

    system("cp /home/jx/myfile /home/jx/myfile1");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值