1、 P(s):S=S-1;
if(s>0),则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(s):S=S+1;
if(S>0), 则该进程继续执行;否则释放队列中第一个等待信号量的进程。
2、以下是排序的部分,
TYPE compare(TYPE *head)
{TYPE *pb,*pf,*r;
int temp,i=0;
char str1[20],str2[20];
pb=head;
pf=pb->next;
while(((n+m)*(n+m-1)/2)>i)
{
r=pf;
while(pf!=NULL)
{
if(pb->num>pf->num)
{ r=pf;
temp=r->num;
r->num=pb->num;
pb->num=temp;
strcpy(str1,pb->name);
strcpy(str2,pf->name);
strcpy(pb->name,str2);
strcpy(pf->name,str1);
strcpy(str1,pb->tel);
strcpy(str2,pf->tel);
strcpy(pb->tel,str2);
strcpy(pf->tel,str1);
}
pb=pf;
pf=pf->next;
}
pb=head;
pf=pb->next;
i++;
}
return head;
}
这两种是转载,感觉这种写法不好,写一个不用换值,而换指针。
if(s>0),则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(s):S=S+1;
if(S>0), 则该进程继续执行;否则释放队列中第一个等待信号量的进程。
2、以下是排序的部分,
TYPE compare(TYPE *head)
{TYPE *pb,*pf,*r;
int temp,i=0;
char str1[20],str2[20];
pb=head;
pf=pb->next;
while(((n+m)*(n+m-1)/2)>i)
{
r=pf;
while(pf!=NULL)
{
if(pb->num>pf->num)
{ r=pf;
temp=r->num;
r->num=pb->num;
pb->num=temp;
strcpy(str1,pb->name);
strcpy(str2,pf->name);
strcpy(pb->name,str2);
strcpy(pf->name,str1);
strcpy(str1,pb->tel);
strcpy(str2,pf->tel);
strcpy(pb->tel,str2);
strcpy(pf->tel,str1);
}
pb=pf;
pf=pf->next;
}
pb=head;
pf=pb->next;
i++;
}
return head;
}
这两种是转载,感觉这种写法不好,写一个不用换值,而换指针。