go-spawn 0.1.2

a library that provides macros to spawn and join threads with minimal boilerplate
Documentation
# `go-spawn`

`go-spawn` is a library that provides macros to spawn and join threads with minimal boilerplate. 
Threads can be spawned with either `go!` or `go_ref!` and can be joined with either `join!` or
`join_all!`.

## Installation

`go-spawn` is published on `https://crates.io`. To use in your Rust project, add the latest version
of `go-spawn` to your `Cargo.toml` file:

```toml
[dependencies]
go-spawn = "0.1.0"
``` 

## Examples.

```rust
use go_spawn::{go, join};
use std::sync::{
    atomic::{AtomicI64, Ordering},
    Arc,
};

let counter = Arc::new(AtomicI64::new(0));
let counter_cloned = counter.clone();

// Spawn a thread that captures values by move.
go! {
    for _ in 0..100 {
        counter_cloned.fetch_add(1, Ordering::SeqCst));
    }
}

// Join the most recent thread spawned by `go_spawn` that has not yet been joined.
assert!(join!().is_ok());
assert_eq!(counter.load(Ordering::SeqCst), 100);
```

```rust
use go_spawn::{go_ref, join};
use std::sync::{
    atomic::{AtomicI64, Ordering},
};

static COUNTER: AtomicI64 = AtomicI64::new(0);

for _ in 0..10 {
    // Spawn a thread that captures by reference.
    go_ref!(COUNTER.fetch_add(1, Ordering::SeqCst));
}

// Join all not-yet-joined threads spawned by `go_spawn`.
join_all!();
assert_eq!(counter.load(Ordering::SeqCst), 10);
```

## Documentation

Documentation can be found at `https://docs.rs/go-spawn`.