void lock() { Node::Ptr unlocked(nullptr, 0); if (!tail_.compare_exchange_strong(unlocked, Node::Ptr(nullptr, 1), std::memory_order_acquire)) { slowpathLock(unlocked); } }
void lock() { XEDGE(lock, out); Node::Ptr unlocked(nullptr, 0); if (!L(lock, tail_.compare_exchange_strong(unlocked, Node::Ptr(nullptr, 1)))){ LS(lock, slowpathLock(unlocked)); } LPOST(out); }