Changes for page Deadlock Prevention
Last modified by chrisby on 2023/11/28 19:17
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -1,11 +1,11 @@ 1 1 Deadlocks can only occur if all four specific conditions are met. Therefore, strategies to prevent deadlocks focus on negating one of these conditions. 2 2 3 -| ------------------------ -----------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|4 -| **Condition**|**Description**|**Solutions**|**Dangers**|5 -| Mutual Exclusion / Mutex|When resources can't be shared betweenthreadsand there arefewerresources than threads.| 1) Use concurrently accessible resourcessuchasAtomicInteger. 2) Increase the number of resources until itis greaterthanor equal to the number of competing threads. 3) Check if eachrequired resource is accessible beforestarting the task. ||6 -| Lock&Wait|Onceathreadhasacquiredaresource,itwillnotreleaseituntilithasacquiredalltheotherresourcesitneedsandhascompleteditswork.|Beforereservingaresource,checkitsavailability.Ifaresourceisunavailable,releaseallresourcesandstartover.|1)Starvation:Athreadnevermanagestoreservealltheresourcesitneeds.2)Livelock:Thethreadgetstangledup.→Thesetwoapproachesarealwaysapplicable,butinefficientbecausetheycausebadperformance.|7 -| NoPreemption|Athreadisunabletostealaresourcesreservedbyanother thread.|Athreadisallowedtoaskanotherthreadtoreleaseallofitsresources(includingtherequiredone)andstartingfromanew.Thisapproachissimilartothe'Lock&Wait'solutionbuthasabetterperformance.||8 -| CircularWaiting/DeadlyEmbrace|Whentwoormorethreadsrequirearesourcewhichisalreadyreservedbyanotherofthesethreads.Example:ThreadT1hasresourceR1andwaitsforR2tobereleased.ThreadT2hasresourceR2andwaitsforR1tobereleased.|Allthreadsreserveallresourcesinathesameorder.|1)Theorderofreservationdoesn'tnecessarilyhavetobethesameastheorderofusage.Thisleadstoinefficiencieslikereservingaresourceatthebeginningwhichisjustrequiredattheendofthetask.2)Unnecessarilylonglockedresources.3)Ordercannotalwaysbespecified.|3 +| ------------------------ | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | 4 +| **Condition** | **Description** | **Solutions** | **Dangers** | 5 +| Mutual Exclusion / Mutex | When resources can't be used by mutual thread and there are less resources than threads. | 1) Use concurrently accessible resources like AtomicInteger. 2) Increase the number of resources until its greater or equal to the number of competing threads. 3 ) Check if every required resource is accessible before the task starts. | | 6 +| | | | | 7 +| | | | | 8 +| | | | | 9 9 10 10 #### Lock & Wait 11 11