# Poco

# class AtomicFlag

Library: Foundation
Package: Core
Header: Poco/AtomicFlag.h

## Description

This class implements an atomic boolean flag by wrapping the std::atomic_flag. It is guaranteed to be thread-safe and lock-free.

Only default-construction is allowed, objects of this class are not copyable, assignable or movable.

Note that this class is not a replacement for (atomic) bool type because its value can not be read without also being set to true. However, after being set (either explicitly, through the set() call or implicitly, via operator bool()), it can be reset and reused.

The class is useful in scenarios such as busy-wait or one-off code blocks, e.g.:

class MyClass { public:

    void myFunc()
    {
        if (!_beenHere) doOnce();
        doMany();
    }

    void doOnce() { /* executed once */ }

    void doMany() { /* executed multiple times */ }

private:

    AtomicFlag _beenHere;

}

MyClass myClass; int i = 0; while (++i < 10) myClass.myFunc();

## Member Summary

Member Functions: operator bool, reset, set

## Constructors

### AtomicFlag

AtomicFlag() = default;

Creates AtomicFlag.

## Destructor

### ~AtomicFlag

~AtomicFlag() = default;

Destroys AtomicFlag.

## Member Functions

### operator bool

operator bool();

Sets the flag to true and returns previously held value.

### reset

void reset();

Resets the flag to false.

### set

bool set();

Sets the flag to true and returns previously held value.