مسابقه اول جی کل

به اولین مسابقه جی کل خوش آمدید! در این مسابقه شما باید یک پیاده سازی کارا برای مسأله معروف Producer-Consumer ارائه نمایید. به برترین پیادهسازی حداقل یک جایزه یک میلیون ریالی تقدیم می شود.
شرح مسابقه:
مسأله Producer-Consumer مسألهای سنتی در زمینه استفاده همزمان چند فرایند از یک فهرست مشترک محدود (bounded shared buffer) است. فرایند Producer مسؤول ایجاد آیتمهای جدید و فرایند Consumer مسؤول برداشت و مصرف کردن از فهرست (لیست یا بافر) مشترک هستند. پیادهسازی این مسأله کاربردهای فراوانی در ارسال پیغام، پردازش صف و غیره دارد.
فرایند Producer ، عضو جدیدی به فهرست مشترک اضافه میکند. در صورتی که ظرفیت فهرست مشترک تکمیل باشد (پر شده باشد)، فرایند Producer باید منتظر خالی شدن ظرفیت بماند. فرایند Consumer عضوی را از فهرست میخواند و آن را از فهرست حذف مینماید. در صورتی که فهرست خالی باشد، فرایند Consumer باید منتظر ایجاد عضو جدید بماند.
پیچیدگی پیادهسازی این الگو زمانی نمایان میشود که چندین فرایند (thread) همزمان Producer و چندین فرایند همزمان Consumer در حال اجرا باشند.
در این مسابقه، کلاسهای Production و Consumption پیادهسازی شدهاند و در اختیار شما قرار گرفتهاند. همچنین کلاس Readership نیز اضافه شده است که مشابه کلاس Consumption عمل میکند، با این تفاوت که عنصر خوانده شده را از فهرست حذف نمیکند. برای آشنایی بیشتر با منطق موردنظر برای فرایندهای Producer ، Consumer و Watcher ، تستهای موجود در کلاس ProducerConsumerTest را با دقت ملاحظه بفرمایید.
در برنامه خود، حداقل این کلاسها را در بسته business پیادهسازی نمایید: Consumer, Producer, Watcher, LimitedQueue
دریافت فایلهای تست:
بسته ir.javacup.test را دریافت فرمایید. بسته business از این پیادهسازی حذف شده است و شما باید آن را پیادهسازی نمایید.
معیار ارزیابی:
بسته ارائه شده به شما شامل کلاس ProducerConsumerTest است. این کلاس دارای test-caseهای testSequential, testEmptyQueue, testFullQueue و testParallel است. در این میان متد testParallel علاوه بر تست کردن فرایندهای همزمان، زمان لازم برای اجرای همزمان فرایندها را در خروجی چاپ میکند.
برنده نهایی مسابقه برنامهای خواهد بود که:
۱- همه test-caseهای کلاس ProducerConsumerTest را با موفقیت اجرا کند. (pass all of the test-cases)
۲- کمترین زمان را در تست testParallel صرف کند. (بیشترین کارایی)
نکته: هنگام ارزیابی نهایی، ممکن است مقدار متغیرهای QUEUE_SIZE و numberOfOperators و numberOfOperations (در کلاس ProducerConsumerTest) تغییر کند.
هدایای برنده:
گواهینامه برترین شرکتکننده از طرف انجمن جاواکاپ.
حداقل مبلغ یک میلیون ریال.
نحوه ارسال:
پیادهسازی شما شامل تعدادی فایل جاوا در یک بسته (packaeg) با نام business خواهد بود. این بسته از برنامه خود را (بدون هیچ اضافات دیگری و بدون بسته test) به صورت یک فایل zip درآورید. همچنین یک فایل متنی شامل نام، نامخانوادگی، تلفن همراه و شماره ملی بسازید. فایل متنی و فایل zip را به آدرس jcal@javacup.ir ارسال نمایید. نمونه یک فایل zip صحیح را از این جا دریافت نمایید. لطفاً ساختار فایل ارسالی خود را دقیقاً مانند همین فایل تنظیم کنید تا در تصحیح اتوماتیک برنامهها، برنامه شما به درستی اجرا شود. لطفاً عنوان (subject) ایمیل خود را برای این مسابقه JCAL001 قرار دهید.
مهلت ارسال:
حداکثر تا ساعت ۲۳:۵۹ روز جمعه ۲۷ دیماه ۱۳۹۲، طبق دستورالعمل مذکور نسبت به ارسال برنامه خود اقدام نمایید.
شرایط شرکت در مسابقه:
برنامههایی که شباهت زیادی به هم داشته باشند، همگی از شرکت در مسابقه حذف میشوند. این شرایط به صورت خودکار و با کمک ابزارهای کشف کد مشابه بررسی میشود. بنابراین از ارسال برنامههای مشابه با ایمیلهای مختلف خودداری کنید. همچنین پیادهسازی خود را در اختیار دیگر شرکتکنندگان قرار ندهید.
دانش لازم برای این مسابقه:
• مفاهیم عمومی برنامهنویسی به زبان جاوا
• برنامهنویسی Multi Thread
• مفاهیم Synchronization
• JUnit
تماس با ما:
در صورت نیاز و در رابطه با مسابقات جیکل، با آدرس jcal@javacup.ir تماس بگیرید.
سلام.این مسابقات چند وقت به چند وقت هستش؟
این مسابقات به عنوان دستگرمی برگزار میشود. فعلاً برنامه منظمی ندارد و هر بار در صورت آماده شدن منابع مالی و سؤالات منظم، برگزار میشود.
نتیجه مسابقه اول جیکل در مطلبی مستقل اعلام شده است.
نتایج آزمون اول رو چه زمانی اعلام میکنید؟
صد تومن؟
من این موضوع رو تو کتاب سیستم عامل خوندم. سی پلاس پلاس بلدم ولی جاوا نه. حالا ببینم چطور می شه.
زیادی آسون نیست؟!! در حد مسابقه نیست. تمرین هم نیست. کار سه سوته.
میگم این جی کل، اسمش ربطی به به کل کل کردن نداره؟ اسم باحالیه.
من جاوا بلدم ولی توی این موضوع زیاد مسلط نیستم.
به نظر موضوع جالبی میاد. ولی این مسأله که میگید زیاد هم معروف نیست! من تا حالا اسمش رو نشنیده بودم.
🙂
سلام
یک مثال کلاسیک در تدریس مبحث Multi-Threading است که معمولا در درس سیستم عامل، در سطح لیسانس تدریس میشود.