Re: Accessing array in thread safe way
Re: Accessing array in thread safe way
- Subject: Re: Accessing array in thread safe way
- From: Brian Lambert <email@hidden>
- Date: Thu, 08 Mar 2012 13:29:28 -0800
Cool! Thanks for that.
My tests were run on an 27" iMac 3.4 GHz Intel Core i7. Code was compiled
with -O3 (Fastest).
The PerfTimer I used is my own. I blogged about it here:
http://www.objective-brian.com/334
Feedback is welcome.
Brian
On Thu, Mar 8, 2012 at 1:20 PM, Charles Srstka <email@hidden>wrote:
> On Mar 8, 2012, at 2:51 PM, Brian Lambert wrote:
>
> > I should have said, "relatively". As in, good enough for many scenarios
> where it will be used infrequently and keeping the code simple makes sense.
> >
> > Of course, you're right, Charles.
> >
> > 1,000,000 integer increments synchronized by @synchronized, OSSpinLock,
> and NSLock:
> > PerfTimer[95716:403] 1,000,000 @synchronized ++value: [118 ms]
> [117,813,038 ns]
> > PerfTimer[95716:403] 1,000,000 OSSpinLock ++value: [8 ms] [8,444,567 ns]
> > PerfTimer[95716:403] 1,000,000 NSLock ++value: [63 ms] [63,049,168 ns]
> >
> > A million operations in ~100 ms is fast. A million operations in ~10 ms
> is WICKED fast.
> >
> > Brian
>
> Another interesting option is mentioned in Appleās GCD man pages;
> dispatch_sync can actually be used as a locking mechanism, like so:
>
> __block NSUInteger value = 0;
>
> dispatch_sync(myLockQueue, ^{
> value++;
> });
>
> This results in something almost as simple as @synchronized, and quite a
> lot faster. Here are the results I get when running it on my MBP. All my
> results do take about twice as long as yours; I suspect you have a rather
> nice machine. :-)
>
> 2012-03-08 15:14:56.408 Lock Benchmarks[57369:403] @synchronized value++:
> 259.156942 ms
> 2012-03-08 15:14:56.429 Lock Benchmarks[57369:403] OSSpinLock value++:
> 19.486010 ms
> 2012-03-08 15:14:56.517 Lock Benchmarks[57369:403] pthread_mutex_t
> value++: 86.329997 ms
> 2012-03-08 15:14:56.645 Lock Benchmarks[57369:403] NSLock value++:
> 127.897978 ms
> 2012-03-08 15:14:56.692 Lock Benchmarks[57369:403] dispatch_sync value++:
> 45.979023 ms
>
> Not bad; OSSpinLock is the only thing that seems to be able to best it.
>
> Charles
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden