پاسخ تمرین ۱
متد wait() هر ترد را مسدود میکند تا زمانی که تعداد تردهایی که به همان نقطه رسیده و خود wait() را صدا زدهاند به مقدار parties برسد. وقتی همه تردهای لازم رسیدند، تمام آنها همزمان آزاد میشوند و ادامه برنامه را اجرا میکنند.
پاسخ تمرین ۲
اگر یکی از تردها هنگام انتظار خطا بدهد یا تایماوتش تمام شود، شیء Barrier وارد حالت Broken میشود و یک BrokenBarrierError در تمام تردهای دیگری که هماکنون منتظر هستند پرتاب میشود. علاوه بر این، هر ترد جدیدی که بعدا سعی کند wait() را روی همان Barrier صدا بزند، نیز فورا با همین خطا مواجه میشود؛ مگر اینکه قبل از آن متد reset() صدا زده باشد.
پاسخ تمرین ۳
تابع action (در صورت تعیین شدن) دقیقا زمانی اجرا میشود که آخرین ترد لازم به Barrier برسد و باعث آزاد شدن همه تردها میشود. این تابع فقط یکبار و توسط همان تردی که Barrier را تکمیل کرده اجرا میشود، پیش از اینکه سایر تردها از حالت انتظار خارج شوند.
پاسخ تمرین ۴
متد reset() شیء Barrier را به حالت اولیه برمیگرداند و آن را از وضعیت Broken خارج میکند تا بتوان دوباره از آن استفاده کرد. این متد معمولا زمانی به کار میرود که بخواهیم پس از بروز خطا یا BrokenBarrierError، همان Barrier را برای دور بعدی همگامسازی تردها دوباره قابل استفاده کنیم.