مسابقه اول جی کل
به اولين مسابقه جی کل خوش آمديد! در اين مسابقه شما بايد يک پياده سازی کارا برای مسأله معروف 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 علاوه بر تست کردن فرايندهای همزمان، زمان لازم برای اجرای همزمان فرايندها را در خروجی چاپ میکند.
برنده نهايی مسابقه برنامهای خواهد بود که:
1- همه test-caseهای کلاس ProducerConsumerTest را با موفقيت اجرا کند. (pass all of the test-cases)
2- کمترين زمان را در تست testParallel صرف کند. (بيشترين کارايی)
نکته: هنگام ارزيابی نهايی، ممکن است مقدار متغيرهای QUEUE_SIZE و numberOfOperators و numberOfOperations (در کلاس ProducerConsumerTest) تغيير کند.
هدايای برنده:
گواهينامه برترين شرکتکننده از طرف انجمن جاواکاپ.
حداقل مبلغ يک ميليون ريال.
نحوه ارسال:
پيادهسازی شما شامل تعدادی فايل جاوا در يک بسته (packaeg) با نام business خواهد بود. اين بسته از برنامه خود را (بدون هيچ اضافات ديگری و بدون بسته test) به صورت يک فايل zip درآوريد. همچنين يک فايل متنی شامل نام، نامخانوادگی، تلفن همراه و شماره ملی بسازيد. فايل متنی و فايل zip را به آدرس jcal@javacup.ir ارسال نماييد. نمونه يک فايل zip صحيح را از اين جا دريافت نماييد. لطفاً ساختار فايل ارسالی خود را دقيقاً مانند همين فايل تنظيم کنيد تا در تصحيح اتوماتيک برنامهها، برنامه شما به درستی اجرا شود. لطفاً عنوان (subject) ايميل خود را برای اين مسابقه JCAL001 قرار دهيد.
مهلت ارسال:
حداکثر تا ساعت 23:59 روز جمعه 27 دیماه 1392، طبق دستورالعمل مذکور نسبت به ارسال برنامه خود اقدام نماييد.
شرايط شرکت در مسابقه:
برنامههایی که شباهت زيادی به هم داشته باشند، همگی از شرکت در مسابقه حذف میشوند. اين شرايط به صورت خودکار و با کمک ابزارهای کشف کد مشابه بررسی میشود. بنابراين از ارسال برنامههای مشابه با ايميلهای مختلف خودداری کنيد. همچنين پيادهسازی خود را در اختيار ديگر شرکتکنندگان قرار ندهيد.
دانش لازم برای اين مسابقه:
• مفاهيم عمومی برنامهنويسی به زبان جاوا
• برنامهنويسی Multi Thread
• مفاهيم Synchronization
• JUnit
تماس با ما:
در صورت نياز و در رابطه با مسابقات جیکل، با آدرس jcal@javacup.ir تماس بگيريد.
سلام.این مسابقات چند وقت به چند وقت هستش؟
اين مسابقات به عنوان دستگرمی برگزار میشود. فعلاً برنامه منظمی ندارد و هر بار در صورت آماده شدن منابع مالی و سؤالات منظم، برگزار میشود.
نتيجه مسابقه اول جیکل در مطلبی مستقل اعلام شده است.
نتایج آزمون اول رو چه زمانی اعلام میکنید؟
صد تومن؟
من این موضوع رو تو کتاب سیستم عامل خوندم. سی پلاس پلاس بلدم ولی جاوا نه. حالا ببینم چطور می شه.
زيادی آسون نيست؟!! در حد مسابقه نيست. تمرين هم نيست. کار سه سوته.
ميگم اين جی کل، اسمش ربطی به به کل کل کردن نداره؟ اسم باحاليه.
من جاوا بلدم ولی توی اين موضوع زياد مسلط نيستم.
به نظر موضوع جالبی مياد. ولی اين مسأله که ميگيد زياد هم معروف نيست! من تا حالا اسمش رو نشنيده بودم.
🙂
سلام
یک مثال کلاسیک در تدریس مبحث Multi-Threading است که معمولا در درس سیستم عامل، در سطح لیسانس تدریس میشود.