# Poco

# class FastMutex

Library: Foundation
Package: Threading
Header: Poco/Mutex.h

## Description

A FastMutex (mutual exclusion) is similar to a Mutex. Unlike a Mutex, however, a FastMutex is not recursive, which means that a deadlock will occur if the same thread tries to lock a mutex it has already locked again. Locking a FastMutex is faster than locking a recursive Mutex. Using the ScopedLock class is the preferred way to automatically lock and unlock a mutex.

## Inheritance

Direct Base Classes: FastMutexImpl

All Base Classes: FastMutexImpl

## Member Summary

Member Functions: lock, tryLock, unlock

## Types Aliases

### ScopedLock

using ScopedLock = Poco::ScopedLock < FastMutex >;

### ScopedLockWithUnlock

using ScopedLockWithUnlock = Poco::ScopedLockWithUnlock < FastMutex >;

## Constructors

### FastMutex

FastMutex();

creates the Mutex.

## Destructor

### ~FastMutex

~FastMutex();

destroys the Mutex.

## Member Functions

### lock

void lock();

Locks the mutex. Blocks if the mutex is held by another thread.

### lock

void lock(
long milliseconds
);

Locks the mutex. Blocks up to the given number of milliseconds if the mutex is held by another thread. Throws a TimeoutException if the mutex can not be locked within the given timeout.

Performance Note: On most platforms (including Windows), this member function is implemented using a loop calling (the equivalent of) tryLock() and Thread::sleep(). On POSIX platforms that support pthread_mutex_timedlock(), this is used.

### tryLock

bool tryLock();

Tries to lock the mutex. Returns false immediately if the mutex is already held by another thread. Returns true if the mutex was successfully locked.

### tryLock

bool tryLock(
long milliseconds
);

Locks the mutex. Blocks up to the given number of milliseconds if the mutex is held by another thread. Returns true if the mutex was successfully locked.

Performance Note: On most platforms (including Windows), this member function is implemented using a loop calling (the equivalent of) tryLock() and Thread::sleep(). On POSIX platforms that support pthread_mutex_timedlock(), this is used.

### unlock

void unlock();

Unlocks the mutex so that it can be acquired by other threads.