پاسخ تمرین ۱
Condition یک Lock را همراه با قابلیت منتظر ماندن و اعلام تفییرات با هم ترکیب میکند، در حالی که Event فقط یک سیگنال حمل میکند و هیچ اطلاعی از خود دادههای مشترک ندارد. این اهمیت دارد چون بررسی یا تفییر امن دادههای مشترک به Lock نیاز دارد، و Condition هر دوی این بخش را با هم در یک شیء به ما میدهد.
پاسخ تمرین ۲
وقتی Task داخل wait معلق است، Lock موقتا رها میشود، تا Taskهای دیگر بتوانند وارد شوند و دادههای مشترک را تفییر دهند. به محض اینکه یک notify این Task را دوباره بیدار کند، wait دوباره Lock را میگیرد، قبل از اینکه اجازه دهد ادامهی کد اجرا شود.
پاسخ تمرین ۳
wait_for داخل یک حلقه بارها و بارها دوباره wait را صدا میزند و هر بار تابع شرط دادهشده را بررسی میکند، تا وقتی که آن تابع در نهایت درست برگرداند. اما صدا زدن مستقیم wait فقط یک بار معلق میشود و با یک notify بیدار میشود، بدون اینکه خودش چیزی را دوباره بررسی کند.
پاسخ تمرین ۴
اگر notify بیرون از آن بلوک یا قبل از انجام شدن تفییر واقعی صدا زده شود، یک Task منتظر ممکن است بیدار شود، شرط را بررسی کند و هنوز نادرست ببیند، و دوباره مجبور شود به خواب برگردد بدون اینکه هیچوقت بفهمد چیزی واقعا تفییر کرده.