4 个版本
0.1.3 | 2021年1月29日 |
---|---|
0.1.2 | 2021年1月29日 |
0.1.1 | 2021年1月15日 |
0.1.0 | 2021年1月15日 |
#880 in 并发
19KB
362 行
单值更新通道。Updater 可以更新共享值,然后 Receiver 可以使用 receive_update
方法更新其内部值。
示例
use update_channel::channel_with;
use std::thread::spawn;
let (mut receiver, updater) = channel_with(0);
assert_eq!(*receiver.borrow(), 0);
spawn(move || {
updater.update(2).unwrap(); // shared value is 2
updater.update(12).unwrap(); // shared value is 12
})
.join().unwrap();
// Shared value is 2 but internal value is 0
assert_eq!(*receiver.borrow(), 0);
// Update the latest value
receiver.recv_update().unwrap();
// Shared value is 12 and internal value 12
assert_eq!(*receiver.borrow(), 12);
update_channel 在 MIT 许可协议下分发。
查看 LICENSE 获取更多信息
lib.rs
:
单值多生产者多消费者更新通道。接收者和通道都可以通过 update_channel 和 update_channel_with 函数创建。
通道大多是无锁的,多个读取者可以同时访问共享值。唯一可能阻塞的方式是通过调用 borrow_locked
方法并持有 RwLockReadGuard,或者同时发生大量写入。
更新通道实际上可以看作是一个可以由 Updater 更新的单值,然后接收者可以通过克隆其内部缓冲区中的新值来使用 receive_update
方法更新其内部值。如果只使用单个接收者,则 take_update 方法是 receive_update 方法的更有效替代。
示例
use update_channel::channel_with;
use std::thread::spawn;
let (mut receiver, updater) = channel_with(0);
assert_eq!(*receiver.borrow(), 0);
spawn(move || {
updater.update(2).unwrap(); // shared value is 2
updater.update(12).unwrap(); // shared value is 12
})
.join().unwrap();
// Shared value is 2 but internal value is 0
assert_eq!(*receiver.borrow(), 0);
// Update the latest value
receiver.recv_update().unwrap();
// Shared value is 12 and internal value 12
assert_eq!(*receiver.borrow(), 12);