Milad.H
جمعه 25 فروردین 1391, 14:10 عصر
سلام دوستان
این کد برنامه است که در Borland
++C نوشته شده و من چند تا سوال دارم
لطفا کمک کنین :
#include<iostream.h>
[LTR_INLINE]int x=0,r=0,rw=0,ww=0,a[100],k,p;
void reader();
void writer();
void dec(int a[]);
int is0(int a[]);
void show();
void set3();
class semaphore
{
public:
int count;
int pnum;
}sem;
void wait(semaphore sem);
void signal(semaphore sem);
int main()
{
while(1)
{
cout<<"Please Enter The process Type( 1 for reader and 2 for writer ):";
cin>>p;
if(p==1)
reader();
else
if(p==2)
writer();
else
if(p==0)
{ //1
k=is0(a);
if(x>0)
x--;
else
if(k>0)
dec(a);
else
if(k==0 && rw>0)
set3();
else
if(k==0 && ww>0)
{
ww--;
x=3;
x--;
}
} // 1
else
break;
show();
}
return 0;
}
/////
void reader()
{
r++;
wait(sem);
if(x==0)
{
if(rw==0)
{
cout<<"Process Executed.\n";
a[r-1]=3;
signal(sem);
dec(a);
}
else
{
rw++;
set3();
}
}
else
if(x>0)
{
r--;
x--;
rw++;
cout<<"Process Blocked.\n";
}
k=is0(a);
}
////////////
void writer()
{ k=is0(a);
wait(sem);
if(x==0 && k==0 && rw==0)
{ cout<<"Process Execute.\n";
x=3;
signal(sem);
ww--;
x--;
}
if(x==0 && k==0 && rw>0)
{
ww++;
set3();
}
else
if(x==0 && k>0)
{
ww++;
dec(a);
}
else
if(x>0)
{
ww++;
x--;
}
}
/////////////
void dec(int a[])
{
for(int d=0;d<r;d++)
if(a[d]>0)
a[d]--;
}
////////////
int is0(int a[])
{int l=0;
for(int j=0;j<r;j++)
if(a[j]>0)
l++;
return l;
}
///////////
void show()
{ cout<<"the reader queue is: ";
for(int l=0;l<r;l++)
if(a[l]!=0)
cout<<a[l]<<" ";
cout<<"\nthe writer wait number is: "<<ww<<"\n";
cout<<"the reader wait number is: "<<rw<<"\n";
cout<<"the writer remaining time is: "<<x<<"\n\n\n";
}
//////////
void set3()
{
r=rw;
rw=0;
for(int j=0;j<r;j++)
a[j]=3;
dec(a);
}
///////////
void wait(semaphore sem)
{
sem.count--;
if(sem.count<0)
sem.pnum++;//the process blocked.
else
{sem.count++;}
}
////////////
void signal(semaphore sem)
{
sem.count++;
if(sem.count<0 )
sem.pnum--;
else
{}
}
اینجا کار s.pnum و s.count چیه؟
کار توابع is0() و ُset3() چیه؟
چرا در تمام برنامه عدد 3 استفاده شده؟(قسمت های قرمز رنگ)
این کد برنامه است که در Borland
++C نوشته شده و من چند تا سوال دارم
لطفا کمک کنین :
#include<iostream.h>
[LTR_INLINE]int x=0,r=0,rw=0,ww=0,a[100],k,p;
void reader();
void writer();
void dec(int a[]);
int is0(int a[]);
void show();
void set3();
class semaphore
{
public:
int count;
int pnum;
}sem;
void wait(semaphore sem);
void signal(semaphore sem);
int main()
{
while(1)
{
cout<<"Please Enter The process Type( 1 for reader and 2 for writer ):";
cin>>p;
if(p==1)
reader();
else
if(p==2)
writer();
else
if(p==0)
{ //1
k=is0(a);
if(x>0)
x--;
else
if(k>0)
dec(a);
else
if(k==0 && rw>0)
set3();
else
if(k==0 && ww>0)
{
ww--;
x=3;
x--;
}
} // 1
else
break;
show();
}
return 0;
}
/////
void reader()
{
r++;
wait(sem);
if(x==0)
{
if(rw==0)
{
cout<<"Process Executed.\n";
a[r-1]=3;
signal(sem);
dec(a);
}
else
{
rw++;
set3();
}
}
else
if(x>0)
{
r--;
x--;
rw++;
cout<<"Process Blocked.\n";
}
k=is0(a);
}
////////////
void writer()
{ k=is0(a);
wait(sem);
if(x==0 && k==0 && rw==0)
{ cout<<"Process Execute.\n";
x=3;
signal(sem);
ww--;
x--;
}
if(x==0 && k==0 && rw>0)
{
ww++;
set3();
}
else
if(x==0 && k>0)
{
ww++;
dec(a);
}
else
if(x>0)
{
ww++;
x--;
}
}
/////////////
void dec(int a[])
{
for(int d=0;d<r;d++)
if(a[d]>0)
a[d]--;
}
////////////
int is0(int a[])
{int l=0;
for(int j=0;j<r;j++)
if(a[j]>0)
l++;
return l;
}
///////////
void show()
{ cout<<"the reader queue is: ";
for(int l=0;l<r;l++)
if(a[l]!=0)
cout<<a[l]<<" ";
cout<<"\nthe writer wait number is: "<<ww<<"\n";
cout<<"the reader wait number is: "<<rw<<"\n";
cout<<"the writer remaining time is: "<<x<<"\n\n\n";
}
//////////
void set3()
{
r=rw;
rw=0;
for(int j=0;j<r;j++)
a[j]=3;
dec(a);
}
///////////
void wait(semaphore sem)
{
sem.count--;
if(sem.count<0)
sem.pnum++;//the process blocked.
else
{sem.count++;}
}
////////////
void signal(semaphore sem)
{
sem.count++;
if(sem.count<0 )
sem.pnum--;
else
{}
}
اینجا کار s.pnum و s.count چیه؟
کار توابع is0() و ُset3() چیه؟
چرا در تمام برنامه عدد 3 استفاده شده؟(قسمت های قرمز رنگ)