پاسخ تمرین ۱
این مث به صورت عمدی اضافه شده تا پنجره زمانی بروز Race Condition بزرگتر و قابل مشاهده شود. این مڪث برای صحت برنامه لازم نیست و فقط برای نمایش بهتر مشکل در این مثال آموزشی به کار رفته است.
پاسخ تمرین ۲
استفاده از with lock: تضمین میکند که حتی اگر درون بلوک خطایی (Exception) رخ دهد، متد release() بهطور خودکار اجرا شود. در حالی که با فراخوانی دستی acquire() و release()، اگر خطایی رخ دهد و release فراخوانی نشود، برنامه دچار Dead Lock میشود. به همین دلیل with lock امنتر و خواناتر است.
پاسخ تمرین ۳
بدون قفل، چند ترد میتوانند بهطور همزمان مقدار counter را بخوانند و بنویسند. این کار باعث Race Condition میشود و مقدار نهایی counter نادرست و قابل پیشبینی نخواهد بود.