I found an implementation of spinlock in concurrency.d.
```
static shared struct SpinLock
{
     void lock() { while (!cas(&locked, false, true)) { 
Thread.yield(); } }
     void unlock() { atomicStore!(MemoryOrder.rel)(locked, false); 
}
     bool locked;
}
```
Why atomicStore use MemoryOrder.rel instead of MemoryOrder.raw?