From af97f7bd59f848339be6733646609cc05e7854b2 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Tue, 29 Jul 2014 17:24:06 +0200 Subject: [PATCH] Adds "Prefer dispatch queues to locks for mutual exclusion" section. --- Cocoa Programming Guidelines.pdf | Bin 121262 -> 123131 bytes Cocoa Programming Guidelines.tex | 58 +++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/Cocoa Programming Guidelines.pdf b/Cocoa Programming Guidelines.pdf index c1f2621fb2ef11420a0c0eb082de9e9d10b7750a..293a6475be77b5d1f9f34e9bf98bffee1eaddc8d 100644 GIT binary patch delta 37132 zcmZ6y18k>J^9H߭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 delta 35270 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 diff --git a/Cocoa Programming Guidelines.tex b/Cocoa Programming Guidelines.tex index 7cf6dc6..c45e0c9 100644 --- a/Cocoa Programming Guidelines.tex +++ b/Cocoa Programming Guidelines.tex @@ -731,13 +731,59 @@ To avoid priority inversion problems with Grand Central Dispatch use default que \end{importantlisting} -\subsection{Multiple readers one writer} +\subsection{Prefer dispatch queues to locks for mutual exclusion} -A concurrent isolation queue is used to synchronise access to a property. +Critical sections of the code are isolated by a serial dispatch queue. It allows the calling thread to continue execution in contrast to \inlinecode{NSLock} and \inlinecode{@synchronized} directive. \begin{codelisting} -NSString * queueLabel = [NSString stringWithFormat:@"%@.isolation.%p", [self class], self]; -self.isolationQueue = dispatch_queue_create([queueLabel UTF8String], DISPATCH_QUEUE_CONCURRENT); +- (id)init +{ + self = [super init]; + if (self) { + NSString * label = [NSString stringWithFormat:@"%@.isolationQueue.%p", [self class], self]; + _isolationQueue = dispatch_queue_create([label UTF8String], DISPATCH_QUEUE_SERIAL); + } + return self; +} +\end{codelisting} + +The above mentioned queue label helps finding the owning object of the queue while debugging. + +\begin{codelisting} +- (void)startDownloading +{ + dispatch_async(self.isolationQueue, ^{ + // critical code section A + } +} + +- (void)cancelDownloading +{ + dispatch_async(self.isolationQueue, ^{ + // critical code section B + } +} +\end{codelisting} + +\begin{importantlisting} +The queue is not created lazily as it would require the getter to be thread safe. +\end{importantlisting} + + +\subsection{Multiple readers one writer} + +A concurrent dispatch queue is used to synchronise access to a property in an efficient way. + +\begin{codelisting} +- (id)init +{ + self = [super init]; + if (self) { + NSString * queueLabel = [NSString stringWithFormat:@"%@.syncQueue.%p", [self class], self]; + _syncQueue = dispatch_queue_create([queueLabel UTF8String], DISPATCH_QUEUE_CONCURRENT); + } + return self; +} \end{codelisting} Dispatch barrier async runs the block after all previously scheduled blocks are completed and before any following blocks are run. @@ -746,7 +792,7 @@ Dispatch barrier async runs the block after all previously scheduled blocks are - (void)setObject:(id)anObject forKey:(id )aKey { aKey = [aKey copyWithZone:NULL]; - dispatch_barrier_async(self.isolationQueue, ^{ + dispatch_barrier_async(self.syncQueue, ^{ [self.mutableDictionary setObject:anObject forKey:aKey]; }); } @@ -754,7 +800,7 @@ Dispatch barrier async runs the block after all previously scheduled blocks are - (id)objectForKey:(id)aKey { __block id object; - dispatch_sync(self.isolationQueue, ^{ + dispatch_sync(self.syncQueue, ^{ object = [self.mutableDictionary objectForKey:aKey]; }); return object;