🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.unix.programming.kernel
Article #26

TO fion: �����ں��ź���

#26
From: howto
Date: Tue, 12 Mar 2002 06:20
67 lines
4852 bytes
�������ǵ������ˣ��������ܽᣬ�Ǻ�
�����û����ǵ����ӣ�
��sem->count=sem->sleepers=0��Ҳ���������޵ȴ���� ��һ������������У�
�Ⱥ�ֱ����3��down()��������3��up()���������£�
Ϊ�˲������㣬ֻ������һЩ��ı�sleepers��countֵ�IJ��裬������ѭ����������
���е�ԭ��
��������˼·����д���������
down1:
count(0->-1),sleepers(0->1),sleepers-1+count(-1),count(-1),sleepers(1),����
down2:
count(-1->-2),sleepers(1->2),sleepers-1+count(-1),count(-1),sleepers(1),����

down3:
count(-1->-2),sleepers(1->2),sleepers-1+count(-1),count(-1),sleepers(1),����

up1:
count(-1->0),����һ��˯�߽�̣���Ϊ1��,�����1�õ�������У�sleepers-1+count
(0),count(0),sleepers(0),break,
������һ��˯�߽�̣���Ϊ2���������2�õ�������У�sleepers-1+count(-1),count
(-1),sleepers(1),���ȣ�û�ﵽ�������ֵ�˯����
up2:
count(-1->0),����Ϊcount<=0������һ��˯�߽�̣���Ϊ2��,�����2�õ�������У�
sleepers-1+count(0),count(0),sleepers(0),break,
������һ��˯�߽�̣���Ϊ3���������3�õ�������У�sleepers-1+count(-1),count
(-1),sleepers(1),���ȣ�û�ﵽ�������ֵ�˯����
up3:
count(-1->0),����Ϊcount<=0������һ��˯�߽�̣���Ϊ3��,�����3�õ�������У�
sleepers-1+count(0),count(0),sleepers(0),break,
������һ��˯�߽�̣���ʱ������û���ˣ�

�����3���н���ִ��up(), ʹcount =1 ,��ʱ���û��״̬  ��

���濼����ԭ����linuxforum�Ͼٵ��龰�����ǿ��ǽ��2��3û��ô�����ӵ��������
ʵ���һ�㣩
down1:
count(0->-1),sleepers(0->1),sleepers-1+count(-1),count(-1),sleepers(1),����
down2:
count(-1->-2),sleepers(1->2),sleepers-1+count(-1),count(-1),sleepers(1),����
down3:
count(-1->-2),sleepers(1->2),sleepers-1+count(-1),count(-1),sleepers(1),����

  up1:
count(-1->0),����һ��˯�߽�̣���Ϊ1��,�����1�õ�������У�sleepers-1+count(
0),count(0),sleepers(0),break,
������һ��˯�߽�� ����Ϊ2��
up2:
count(0->1),����Ϊcount>0,����ֱ�ӷ��أ� �����2�õ�����ˣ�
sleepers-1+count(0),count(0),sleepers(0),break,
������һ��˯�߽�̣�����Ϊ3��
up3:
count(0->1),����Ϊcount>0,����ֱ�ӷ��أ������3�õ�������У�
sleepers-1+count(0),count(0),sleepers(0),break,
������һ��˯�߽�̣���ʱ������û���ˣ�

�����3���н���ִ��up(), ʹcount =1 ,��ʱ���û��״̬   ��

���������ˣ��Ǻ�

ΪʲôҪ��ִ��wake_up() �أ�Ӧ�ÿ��Դӵ�һ����������������磬�ڵ�һ�������
�����2��һ�εõ��������ʱ��������ʱ������Ľ��
��ûִ��up()�ģ����п���������ִ����up()�ˣ��������п��ܻᷢ��count ==1����
������ʱ�����IJ���˯���ˣ����Ǽ����ӵĺô����Ǻǣ�

��Ȼʵ�������е������Ӧ�������漸��������ۺ��ˣ��ø��Ӱ���������
--
�� ��Դ:��UNIX��� apue.dhs.org��[FROM: 202.38.242.94] 
Technical Details
Message-ID: <3lI6CR$0ni@apue.dhs.org>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!news.cn99.com!news.tiaozhan.com!APUE

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: 10e809,91cd188c853b4a67,start
X-Google-Attributes: gid10e809,public
X-Google-ArrivalTime: 2002-03-11 22:32:29 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!news.cn99.com!news.tiaozhan.com!APUE
From: howTo.bbs@apue.dhs.org (howto)
Newsgroups: cn.bbs.comp.unix.programming.kernel
Subject: TO fion: �����ں��ź���
Date: 12 Mar 2002 06:20:15 GMT
Organization: APUE
Message-ID: <3lI6CR$0ni@apue.dhs.org>
X-Filename: UKP/M.1015912539.A
Lines: 67