کد شما منطقا درست است اما از لحاظ Syntax اشکالاتی را دارد
1- زبان C یک زبان حساس به متن است ، پس نوشتن حرف کوچک و بزرگ برای آن متفاوت است.
2- برای مقدار دهی اولیه در مانیتور از init استفاده کنید
3- برای استفاده از توابع درون مانیتور نیازی به نوشتن نام مانیتور نیست
من کد را با تغییراتی اینجا می نویسم
// * * * * * * * * * * Consumer And Producer * * * * * * * * *
// * * * * * * * * * * With Monitor Solution * * * * * * * * *
monitor Produce_Consume{
condition full, empty;
int count;
void Produce()
{
if(count==100)
waitc(full);
cout<<"Producer Produceing \n";
count++;
if(count==1)
signalc(empty);
}
void Consume()
{
if(count==0)
waitc(empty);
cout<<"Consumer Take Product From Buffer \n";
count--;
if(count==99)
signalc(full);
}
init
{
count=0;
}
}
void Producer()
{
do
{
cout<<"Append Product To Buffer\n";
Produce();
}while(1);
}
void Consumer()
{
do
{
Consume();
cout<<"Consumer Consume The Product \n";
}while(1);
}
void main(){
cobegin
{
Producer();
Consumer();
}
}
آیا baci فقط برای این هست که ما بتونیم نحوه اجرای پروسس هایی که به صورت همروند اجرا می شوند را ببینیم؟( تا در ک بهتری پیدا کنیم برای پیاده سازی آنها در یک محیط برنامه نویسی که همروندی را پشتیبانی می کنه؟)
یکی از کاربردها همین است، کاربرد دیگر تست الگوریتم هایی است که شما طراحی کرده اید و لازم است بصورت همروند اجرا شود.
اگر اجرای فایل .pco یک خروجی ادامه دار نده و در عرض چند ثانیه بعد از اجرا بسته شود نشانه بن بست است؟
ممکنه الگوریتم پایان یافته شده باشد، تصویری از یک بن بست را قبلا Attach کرده ام . (به شکل توجه کنید)
جزو برنامه های baci سه برنامه به نامهای badis , baar, bald است اینها برای چی هستند؟
bald یک لینکر است ، مثلا شما برنامه ای نوشته اید که به کتابخانه ای خاصی (مثلا stdio.h) نیاز دارید، با این برنامه می توانید آنرا به پروژه خود لینک کنید
badis یک Disassembler است که فایل pco شما را به کد ماشین تبدیل می کند و شما می توانید آنرا Debug و یا Trace نمائید.
baar را دقیقا نمی دانم چیه (با آن کار نکردم)
در راهنمای baci نوشته
Usage: bacc [optional_flags] source_filename
Optional_flags:
-h show this help
-c make a .pob object file for subsequent linking
به این h ,c چگونه میشه دسترسی داشت؟
با اضافه کردن این فلگ ها مانند سایر دستورات می توانید قابلیت هایی را به دستورات اضافه کنید
مثال برای گرفتن help
bacc -h
bacc -c myfilename
تفاوت الگوریتم دکر و پترسون در چیست؟
تفاوت این الگوریتم ها در نحوه پیاده سازی است ، هر دوی این الگوریتم ها مساله ناحیه بحرانی را حل می کنند اما به دلیل اینکه الگوریتم دکر از نظر پیاده سازی و روند Trace پیچیده است ، الگوریتم پترسون طراحی شد
پ ن :
1- (جواب یکی از سوال های گذشته) با استفاده از کلمه کلیدی atomic می توانید Test And Set و Swap را براحتی پیاده سازی کنید.
2- اگر می خواهید از محیط ویژوال برای کار با Baci استفاده کنید، می توانید از jBaci استفاده کنید.
3- مجموعه کاملی از Help نرم افزار Baci را از اینجا دریافت کنید.