Use gcc built-in atomics
We shouldn't assert if you call this on a Lock held by another Thread in the same Process. Instead, we should just not unlock.
The scheduler is not allowed to take locks, so if that's happening, we want to make that clear instead of crashing with the more general "Interrupts disabled while trying to take Lock" error.