4次发布
使用旧Rust 2015
0.1.3 | 2018年8月28日 |
---|---|
0.1.2 | 2018年8月28日 |
0.1.1 | 2018年8月20日 |
0.1.0 | 2018年8月18日 |
在#arc-mutex中的第12位
每月30次下载
9KB
151 行
ArcMap
Arc Map旨在允许HashMap中存储Arc
欢迎贡献
v0.1.3中的更改
将三个主要方法中的&mut self改为&self
v0.1.2中的更改
将主通道切换为SyncSender,以便在父级中进行同步
lib.rs
:
ArcMap存在是为了使Map中的多个Mutex基于的元素可访问
而无需在访问一个元素时锁定整个HashMap。
相反,Map被隐藏在内部的一个线程中,该线程将根据请求返回可访问的元素。
与其在fn中限制访问,不如直接返回Arc看起来更简单。
尽管Map可能不包含所需的元素,并且由于线程发送/接收,get方法返回"Result
可以这样访问:(尽管通常用于更复杂的对象)
use arc_map::ArcMap;
let mut am = ArcMap::new();
//update by grabbing mutex
am.insert(3,"hello".to_string());
{
let p = am.get(3).unwrap(); //p is Arc<Mutex<String>>
let mut s = p.lock().unwrap();
s.push_str(" world");
}
//read by grabbing mutex
{
let p2 = am.get(3).unwrap();
let s2 = p2.lock().unwrap();
assert_eq!(*s2,"hello world".to_string());
}
am.insert(4,"goodbye".to_string());
//update in place (No need for scoping)
am.on_do(4,|mut s| (&mut s).push_str(" cruel world")).unwrap();
//get info out
let ls = am.on_do(4,|s| s.clone()).unwrap();
assert_eq!(&ls,"goodbye cruel world");
虽然可以使用传统的互斥锁来实现这一点,但这里的接口使用起来要简单得多。