[1] most race conditions will only trigger on a uniprocessor system if preempted, which is fairly unlikely if the racy data accesses are close together.
[1] most race conditions will only trigger on a uniprocessor system if preempted, which is fairly unlikely if the racy data accesses are close together.
[1] http://developer.apple.com/library/ios/iPad/#documentation/G...
Also GCD is relatively new to iOS, and not the only concurrency API in Cocoa, so yes many apps will still be using (and will continue to use) traditional threads.
Furthermore, GCD has only been around since iOS 4.0, so if your app needs to be compatible to 3.x, you can't use it.
SDK < iOS5, likely, if they decide to play it safe (or some kind of attribute in the bundle). I highly doubt Apple is going to fork iOS again for no reason at all, 4.3 has yet to be released and iOS5 is 4-5 months away tops.
Right now, it's likely that a lot of bugs are not showing themselves regularly, so nobody has bothered running any diagnostic tools (Helgrind, etc.)
Once you deal with one large deep difficult highly concurrent project, you get used to the idea that when there are threads and mutexes involved you have to think REALLY HARD about how it should work, and you can't rely on just trying something and testing it like you can with normal code. And if you do that, you can get threads to work pretty reliably, not just by chance.