JUCE  v6.1.6 (6.0.8-1114)
JUCE API
Looking for a senior C++ dev?
I'm looking for work. Hire me!
juce::CriticalSection Class Reference

A re-entrant mutex. More...

#include <juce_CriticalSection.h>

Inheritance diagram for juce::CriticalSection:
Collaboration diagram for juce::CriticalSection:

Public Types

using ScopedLockType = GenericScopedLock< CriticalSection >
 Provides the type of scoped lock to use with a CriticalSection. More...
 
using ScopedTryLockType = GenericScopedTryLock< CriticalSection >
 Provides the type of scoped try-locker to use with a CriticalSection. More...
 
using ScopedUnlockType = GenericScopedUnlock< CriticalSection >
 Provides the type of scoped unlocker to use with a CriticalSection. More...
 

Public Member Functions

 CriticalSection () noexcept
 Creates a CriticalSection object. More...
 
 ~CriticalSection () noexcept
 Destructor. More...
 
void enter () const noexcept
 Acquires the lock. More...
 
void exit () const noexcept
 Releases the lock. More...
 
bool tryEnter () const noexcept
 Attempts to lock this critical section without blocking. More...
 

Private Attributes

std::aligned_storage< 44, 8 >::type lock
 

Detailed Description

A re-entrant mutex.

A CriticalSection acts as a re-entrant mutex object. The best way to lock and unlock one of these is by using RAII in the form of a local ScopedLock object - have a look through the codebase for many examples of how to do this.

In almost all cases you'll want to declare your CriticalSection as a member variable. Occasionally you may want to declare one as a static variable, but in that case the usual C++ static object order-of-construction warnings should be heeded.

See also
ScopedLock, ScopedTryLock, ScopedUnlock, SpinLock, ReadWriteLock, Thread, InterProcessLock

@tags{Core}

Member Typedef Documentation

◆ ScopedLockType

Provides the type of scoped lock to use with a CriticalSection.

◆ ScopedTryLockType

Provides the type of scoped try-locker to use with a CriticalSection.

◆ ScopedUnlockType

Provides the type of scoped unlocker to use with a CriticalSection.

Constructor & Destructor Documentation

◆ CriticalSection()

juce::CriticalSection::CriticalSection ( )
noexcept

Creates a CriticalSection object.

References lock.

◆ ~CriticalSection()

juce::CriticalSection::~CriticalSection ( )
noexcept

Destructor.

If the critical section is deleted whilst locked, any subsequent behaviour is unpredictable.

References lock.

Member Function Documentation

◆ enter()

void juce::CriticalSection::enter ( ) const
noexcept

Acquires the lock.

If the lock is already held by the caller thread, the method returns immediately. If the lock is currently held by another thread, this will wait until it becomes free.

It's strongly recommended that you never call this method directly - instead use the ScopedLock class to manage the locking using an RAII pattern instead.

See also
exit, tryEnter, ScopedLock

References lock.

◆ exit()

void juce::CriticalSection::exit ( ) const
noexcept

Releases the lock.

If the caller thread hasn't got the lock, this can have unpredictable results.

If the enter() method has been called multiple times by the thread, each call must be matched by a call to exit() before other threads will be allowed to take over the lock.

See also
enter, ScopedLock

References lock.

◆ tryEnter()

bool juce::CriticalSection::tryEnter ( ) const
noexcept

Attempts to lock this critical section without blocking.

This method behaves identically to CriticalSection::enter, except that the caller thread does not wait if the lock is currently held by another thread but returns false immediately.

Returns
false if the lock is currently held by another thread, true otherwise.
See also
enter

References lock.

Member Data Documentation

◆ lock

std::aligned_storage<44, 8>::type juce::CriticalSection::lock
private

The documentation for this class was generated from the following files: