Skip to content
Welcome to the new CppUtils documentation!

RAII structure locking multiple lockers simultaneously without deadlocks.

Uses std::scoped_lock internally to acquire all locks atomically in a deadlock-free manner, regardless of the order lockers are passed across different threads.

auto account0 = CppUtils::Thread::UniqueLocker<Account>{};
auto account1 = CppUtils::Thread::UniqueLocker<Account>{};
{
auto lockBoth = CppUtils::Thread::MultipleAccessor{account0, account1};
auto& [firstAccount, secondAccount] = lockBoth.values;
firstAccount.withdraw(100);
secondAccount.deposit(100);
}
Template parameterDescription
LockersVariadic list of locker types to lock simultaneously.
constexpr MultipleAccessor::MultipleAccessor(Lockers&... lockers);

Locks all provided lockers atomically.

ParameterDescription
lockersVariadic references to lockers to lock.

std::tuple< decltype(std::declval< Lockers >().m_value)&... > values;