دوباره سلام.
در مورد بافر باید ازشما سوالی داشتم. چرا به صورت Array تعریفش کردید؟ برای این کار دلیل خاصی دارین؟
کافیه به این صورت نوشته بشه :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شما یک Semaphore ایجاد کردید با ID ای که مقدارش 100 هست و اون رو با 1 مقدار دهی کردید.
کاملا درسته. در مورد lock کردن من پیشنهاد میکنم که از sem_lock و sem_unlock در یک تابع استفاده کنید.
یا در main و یا در buf . اما نکته ای که رعایت کردید خیلی مهم هست. "بعد از نمایش بافر در خروجی باید
بافر unlock بشه." که به درستی به این نکته دقت کردین.
اما چند مورد وجود داره :
به این دو کد دقت کنین :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در اینجا اگه pid برابر با 0 باشه برای [0]buf چه اتفاقی میافته؟ چه مقداری در خروجی چاپ میشه؟
می بینید که بافر رو مقداردهی نکردید و چیزی در اون نیست. ( یک runtime-error )
راستی چرا مقدار pid رو برای بزرگتر از 0 چک میکنید؟ (اگرچه ممکنه اتفاق بیافته.) مقدار برگشتی تابع
fork برابر با Child-Process-ID نیست. برای گرفتن ID ای که Child-Process جدید داره باید از getpid
استفاده کنید.
اینکه تابعی برای پر کردن buf نوشتید کار کاملا درستی هست. اما دلیلی نداره که هم pid و هم ppid رو به
عنوان آرگومان بگیرید. یک تابع با یک آرگومان(از نوع int ) برای این کار بنویسید.
در مورد lock وunlock کردن به این شکل عمل کنین. ( یه پیشنهاد )
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مشخص هست که الگوریتم کار رو درست گرفتید. اما کمی پیاده سازی کدتون مشکل داره.