این تمرینها بر پایهی درس مشکل Deadlock در پایتون هستند.
تمرین ۱ (مفهومی)
Dead Lock چیست و در مثال سرویس بهداشتی، چرا با اینکه منبع اشتراکی (سرویس بهداشتی) آزاد بود، افراد منتظر ماندند؟
تمرین ۲ (مفهومی)
در سناریوی اول (قفلکردن دوبارهی یک قفل)، چرا فراخوانی یک تابع از داخل تابع دیگری که قبلاً همان قفل را گرفته، باعث Dead Lock میشود؟ دو راهحل پیشنهاد دهید.
تمرین ۳ (کد)
یک تابع بنویسید که قفلی بگیرد و تابع دیگری را صدا بزند که میخواهد همان قفل را دوباره بگیرد (که به بنبست منجر میشود). سپس با استفاده از RLock آن را اصلاح کنید.
تمرین ۴ (مفهومی)
در سناریوی دوم (ترتیب اشتباه قفلها)، چرا وقتی دو ترد قفلها را با ترتیب معکوس بگیرند برنامه در Dead Lock گیر میکند؟ برای جلوگیری چه باید کرد؟
تمرین ۵ (کد)
یک تابع transfer(src, dst, amount) بنویسید که بین دو حساب پول جابهجا میکند و هر حساب قفل خودش را دارد. کاری کنید که حتی اگر دو انتقال معکوس (A→B و B→A) همزمان اجرا شوند، بنبست رخ ندهد.
تمرین ۶ (مفهومی)
در سناریوی سوم (مدیریت خطای اشتباه)، فراموشکردن مدیریت یک نوع خطا چطور میتواند باعث Dead Lock شود؟ بهترین راه جلوگیری کدام است؟
تمرین ۷ (کد)
کدی بنویسید که در آن بهخاطر یک خطای مدیریتنشده، قفل هرگز آزاد نمیشود. سپس آن را با with lock اصلاح کنید و توضیح دهید چرا with امنتر است.