Regarding memory_order_acquire / memory_order_release: look at the general data (memory cells or aka resource) that you use to protect the lock. I will call it "secure data."
, lock() (.. ). memory_order_aquire , , ( ) . , unlock(), memory_order_release , , .
/, lock(). ++ concurrency , .
memory_order_relaxed , , , . .