On Tue, Dec 15, 2015, at 01:38 PM, Greg Parker via swift-dev wrote: > > Another solution is to use a handoff lock algorithm. This is what libobjc > does now. The lock owner stores its thread ID in the lock. Each lock waiter > yields to the owner thread specifically, donating its priority and resolving > the inversion. This scheme has theoretical holes when multiple locks are > involved, but in practice we haven't seen any problems. > > As far as I know the spinlock that libobjc now uses is not API.
It's not. I checked earlier today against the copy of the objc runtime I have (from opensource.apple.com; my copy is slightly out of date, at version 647, but it's new enough). The runtime defines a type spinlock_t that's backed by something called os_lock_handoff_s. It also imports a header <os/lock_private.h>, which is presumably where this type is defined. I already updated my radar to suggest that perhaps this type would be a good candidate to expose. Incidentally, if I wanted to implement my own spinlock like this, how can you yield to a specific thread? I'm only aware of pthread_yield_np(), which doesn't take a target thread. -Kevin Ballard _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev