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 (Cocoa-dev@lists.apple.com) 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com