美文网首页
2-4经典进程同步问题

2-4经典进程同步问题

作者: Liquor_4a19 | 来源:发表于2018-11-30 11:27 被阅读0次

    生产者—消费者问题(互斥、同步)

    信号量

    producer :

    repeat

    produce an item in nexp;

    wait(empty);

    wait(mutex);

    buffer(in):=nexp;

    in:=(in+1) mod n;

    signal(mutex);

    signal(full);

    until  false;

    consumer :

    repeat

    wait(full);

    wait(mutex);

    nextc:=buffer(out);

    out:=(out+1) mod n;

    signal(mutex);

    signal(empty);

    consume the item in nexc;                       

    until  false; 

    AND信号量的方式

    consumer :

        repeat

        nextc:=buffer(out);

        out:=(out+1) mod n;

        consume the item in nexc;

    until  false;

    哲学家就餐问题(互斥)(可见:相邻两位不能同时进餐;最多只能有两人同时进餐。 )

    记录型信号量

    (1)第i 位哲学家的活动可描述为:

    repeat

              wait(chopstick[ i ]);

              wait(chopstick[ ( i +1) mod 5] );

        …

        eat;

        …

              signal(chopstick[ i ]);

              signal(chopstick[ ( i +1) mod 5] );

        …

        think;

    until  false;

    2)就餐死锁问题(数量控制)

    一刀切:仅当哲学家的左右两只筷子均可用时,才允许他拿起筷子进餐。

    AND信号量

    Var chopstick: array [0, …, 4] of semaphore:=(1, 1, 1, 1, 1);

    Process i

        repeat

            think;

            Swait(chopstick[ ( i +1) mod 5] , chopstick[ i ] );

            eat;

            Ssignal(chopstick[ ( i +1) mod 5] , chopstick[ i ] );   

        until  false;

    读者——写者问题(有条件的互斥)

    合理的同步关系是:

    多个读进程可同时读;

    Writer进程与任何其他进程(包括Reader进程或其他Writer进程)不允许同时访问文件。

    相关文章

      网友评论

          本文标题:2-4经典进程同步问题

          本文链接:https://www.haomeiwen.com/subject/cquccqtx.html