2-4经典进程同步问题

2018-11-30  本文已影响0人  Liquor_4a19

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

信号量

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进程)不允许同时访问文件。

上一篇 下一篇

猜你喜欢

热点阅读