پاسخ تمرین ۱
Starvation وقتی اتفاق میافتد که یک ترد هیچوقت قفل یا منبعی را که لازم دارد به دست نمیآورد، چون تردهای دیگر همیشه زودتر از او آن منبع را میگیرند. برخلاف Deadlock، تمام برنامه متوقف نمیشود و بقیهی تردها به خوبی کار میکنند؛ فقط یک یا چند ترد بدشانس هرگز نوبتشان نمیرسد.
پاسخ تمرین ۲
کارگرهای پرطمع پشت سر هم و با فاصلهی کم قفل را میگیرند، در حالی که کارگر بدشانس هر بار که میخواهد قفل را بگیرد، یکی از تردهای دیگر زودتر رسیده است. در برنامههای واقعی، این الگو معمولا ناشی از زمانبندی نامناسب، اولویتدهی اشتباه بین تردها، یا ترتیب ثابت و قابل پیشبینی در گرفتن قفلهاست.
پاسخ تمرین ۳
Livelock شبیه Deadlock است اما با یک تفاوت مهم: تردها مسدود نیستند و دائما مشفول هستند، اما این فعالیت هیچ پیشرفتی در نتیجه ایجاد نمیکند. در داستان راهرو، دو نفر هر دو برای رد شدن دیگری به یک طرف کنار میروند، میبینند راه هنوز بسته است، هر دو به طرف دیگر کنار میروند، و این کار تا ابد تکرار میشود — هیچکدام واقعا از کنار دیگری رد نمیشود.
پاسخ تمرین ۴
در Deadlock، تردها مسدود میمانند و هیچ کاری انجام نمیدهند. در Livelock، تردها فعال میمانند، کد اجرا میکنند و حتی منابع واحد پردازنده را هم مصرف میکنند، اما هرگز به نتیجهی مفیدی نمیرسند. تشخیص Deadlock معمولا سادهتر است چون برنامه کاملا میایسد، اما تشخیص Livelock سختتر است چون برنامه به نظر میرسد همچنان در حال کار کردن است.