并发进程的同步与互斥

/*
两个或更多进程在协作时需保持互斥
进程的并发执行特征
P,V操作
*/
#include <sys.h>

semaphore mutex=1;

int x;
void process_one()
{
    int y,z;
    P(mutex);
    //wait(mutex);
    x=1;
    y=0;
    if(x>=1)
        y=y+1;
    z=y;
    V(mutex);
    //signer(mutex);
    return(z);
}

void process_two()
{
    int y,z;
    P(mutex);
    x=0;
    y=0;
    if(x<=1)
        y=y+2;
    z=y;
    V(mutex);
    return(z);
}
//进程间的同步
//生产者与消费者之间的关系
#include <xinu.h>

void produce(sid32,sid32),consume(sid32,sid32);
int32 n = 0;

void main(void)
{
    sid32 prodeced,consumed;
    consumed = semcreate(0);
    prodeced = semcreate(1);
    resume(create(consume,1024,20,"cons",2,consumed,prodeced));
    resume(create(produce,1024,20,"prod",2,consumed,prodeced));
}

void produce(sid32 consumed,sid32 prodeced)
{
    int32 i;
    for(i=1;i<=2000;i++)
    {
        wait(consumed);
        n++;
        signal(prodeced);
    }
}

void consume(sid32 consumed,sid32 prodeced)
{
    int32 i;
    for(i=1;i<=2000;i++)
    {
        wait(prodeced);
        printf("n = %d\n",n);
        signal(consumed);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值