/SwapArc

Swap Arcs out while using them

Primary LanguageRustApache License 2.0Apache-2.0

SwapArc

You can add SwapArc to your Cargo toml by copying this line: swap-arc = "0.1.0"

Note: This is basically a faster (only tested on multiple x86_64 setups) drop-in replacement for ArcSwap

SwapArc allows you to swap out Arcs while using them.
Let's consider this example:

use std::sync::Arc;
use std::thread;

struct Config {
    timout: u64,
    ...
}

struct Server {
    config: SwapArc<Config>,
    ...
}

fn test() {
    let server = Arc::new(Server {
        config: Config {
            timout: 1000,
            ...
        },
        ...
    });
    thread::spawn(|| {
        loop {
            // load the config without fearing any blocking or expensive operations.
            server.accept_connection(server.config.load().timeout);
        }
    });
    ...
}

// on network update, update the config seamlessly without blocking loads
server.config.update(Arc::new(Config {
    timeout: ...,
    ...
}));