# Struct core::sync::atomic::AtomicBool [−] [src]

    pub struct AtomicBool {
        // some fields omitted
    }

A boolean type which can be safely shared between threads.

## Methods

### `impl AtomicBool`

#### `const fn new(v: bool) -> AtomicBool`

Creates a new `AtomicBool`.

# Examples

fn main() { use std::sync::atomic::AtomicBool; let atomic_true = AtomicBool::new(true); let atomic_false = AtomicBool::new(false); }

    use std::sync::atomic::AtomicBool;

    let atomic_true  = AtomicBool::new(true);
    let atomic_false = AtomicBool::new(false);

#### `fn load(&self, order: Ordering) -> bool`

Loads a value from the bool.

`load` takes an `Ordering` argument which describes the memory ordering of this operation.

# Panics

Panics if `order` is `Release` or `AcqRel`.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let some_bool = AtomicBool::new(true); assert_eq!(some_bool.load(Ordering::Relaxed), true); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let some_bool = AtomicBool::new(true);

    assert_eq!(some_bool.load(Ordering::Relaxed), true);

#### `fn store(&self, val: bool, order: Ordering)`

Stores a value into the bool.

`store` takes an `Ordering` argument which describes the memory ordering of this operation.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let some_bool = AtomicBool::new(true); some_bool.store(false, Ordering::Relaxed); assert_eq!(some_bool.load(Ordering::Relaxed), false); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let some_bool = AtomicBool::new(true);

    some_bool.store(false, Ordering::Relaxed);
    assert_eq!(some_bool.load(Ordering::Relaxed), false);

# Panics

Panics if `order` is `Acquire` or `AcqRel`.

#### `fn swap(&self, val: bool, order: Ordering) -> bool`

Stores a value into the bool, returning the old value.

`swap` takes an `Ordering` argument which describes the memory ordering of this operation.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let some_bool = AtomicBool::new(true); assert_eq!(some_bool.swap(false, Ordering::Relaxed), true); assert_eq!(some_bool.load(Ordering::Relaxed), false); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let some_bool = AtomicBool::new(true);

    assert_eq!(some_bool.swap(false, Ordering::Relaxed), true);
    assert_eq!(some_bool.load(Ordering::Relaxed), false);

#### `fn compare_and_swap(&self, current: bool, new: bool, order: Ordering) -> bool`

Stores a value into the `bool` if the current value is the same as the `current` value.

The return value is always the previous value. If it is equal to `current`, then the value was updated.

`compare_and_swap` also takes an `Ordering` argument which describes the memory ordering of this operation.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let some_bool = AtomicBool::new(true); assert_eq!(some_bool.compare_and_swap(true, false, Ordering::Relaxed), true); assert_eq!(some_bool.load(Ordering::Relaxed), false); assert_eq!(some_bool.compare_and_swap(true, true, Ordering::Relaxed), false); assert_eq!(some_bool.load(Ordering::Relaxed), false); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let some_bool = AtomicBool::new(true);

    assert_eq!(some_bool.compare_and_swap(true, false, Ordering::Relaxed), true);
    assert_eq!(some_bool.load(Ordering::Relaxed), false);

    assert_eq!(some_bool.compare_and_swap(true, true, Ordering::Relaxed), false);
    assert_eq!(some_bool.load(Ordering::Relaxed), false);

#### `fn fetch_and(&self, val: bool, order: Ordering) -> bool`

Logical "and" with a boolean value.

Performs a logical "and" operation on the current value and the argument `val`, and sets the new value to the result.

Returns the previous value.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let foo = AtomicBool::new(true); assert_eq!(foo.fetch_and(false, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), false); let foo = AtomicBool::new(true); assert_eq!(foo.fetch_and(true, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), true); let foo = AtomicBool::new(false); assert_eq!(foo.fetch_and(false, Ordering::SeqCst), false); assert_eq!(foo.load(Ordering::SeqCst), false); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_and(false, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), false);

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_and(true, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), true);

    let foo = AtomicBool::new(false);
    assert_eq!(foo.fetch_and(false, Ordering::SeqCst), false);
    assert_eq!(foo.load(Ordering::SeqCst), false);

#### `fn fetch_nand(&self, val: bool, order: Ordering) -> bool`

Logical "nand" with a boolean value.

Performs a logical "nand" operation on the current value and the argument `val`, and sets the new value to the result.

Returns the previous value.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let foo = AtomicBool::new(true); assert_eq!(foo.fetch_nand(false, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), true); let foo = AtomicBool::new(true); assert_eq!(foo.fetch_nand(true, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst) as usize, 0); assert_eq!(foo.load(Ordering::SeqCst), false); let foo = AtomicBool::new(false); assert_eq!(foo.fetch_nand(false, Ordering::SeqCst), false); assert_eq!(foo.load(Ordering::SeqCst), true); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_nand(false, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), true);

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_nand(true, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst) as usize, 0);
    assert_eq!(foo.load(Ordering::SeqCst), false);

    let foo = AtomicBool::new(false);
    assert_eq!(foo.fetch_nand(false, Ordering::SeqCst), false);
    assert_eq!(foo.load(Ordering::SeqCst), true);

#### `fn fetch_or(&self, val: bool, order: Ordering) -> bool`

Logical "or" with a boolean value.

Performs a logical "or" operation on the current value and the argument `val`, and sets the new value to the result.

Returns the previous value.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let foo = AtomicBool::new(true); assert_eq!(foo.fetch_or(false, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), true); let foo = AtomicBool::new(true); assert_eq!(foo.fetch_or(true, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), true); let foo = AtomicBool::new(false); assert_eq!(foo.fetch_or(false, Ordering::SeqCst), false); assert_eq!(foo.load(Ordering::SeqCst), false); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_or(false, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), true);

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_or(true, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), true);

    let foo = AtomicBool::new(false);
    assert_eq!(foo.fetch_or(false, Ordering::SeqCst), false);
    assert_eq!(foo.load(Ordering::SeqCst), false);

#### `fn fetch_xor(&self, val: bool, order: Ordering) -> bool`

Logical "xor" with a boolean value.

Performs a logical "xor" operation on the current value and the argument `val`, and sets the new value to the result.

Returns the previous value.

# Examples

fn main() { use std::sync::atomic::{AtomicBool, Ordering}; let foo = AtomicBool::new(true); assert_eq!(foo.fetch_xor(false, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), true); let foo = AtomicBool::new(true); assert_eq!(foo.fetch_xor(true, Ordering::SeqCst), true); assert_eq!(foo.load(Ordering::SeqCst), false); let foo = AtomicBool::new(false); assert_eq!(foo.fetch_xor(false, Ordering::SeqCst), false); assert_eq!(foo.load(Ordering::SeqCst), false); }

    use std::sync::atomic::{AtomicBool, Ordering};

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_xor(false, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), true);

    let foo = AtomicBool::new(true);
    assert_eq!(foo.fetch_xor(true, Ordering::SeqCst), true);
    assert_eq!(foo.load(Ordering::SeqCst), false);

    let foo = AtomicBool::new(false);
    assert_eq!(foo.fetch_xor(false, Ordering::SeqCst), false);
    assert_eq!(foo.load(Ordering::SeqCst), false);

## Trait Implementations

### `impl Default for AtomicBool`

#### `fn default() -> Self`

### `impl Sync for AtomicBool`

### `impl Debug for AtomicBool`

#### `fn fmt(&self, f: &mut Formatter) -> Result`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize`)