RwLock允许同一时间有多个读对象或只存在一个写对象。在多线程中,如果要多个读或多个写,需要Arc::RwLock 。

use std::thread;
use std::sync::{Arc, Mutex};
use std::time;
use std::collections::{HashMap};
use std::sync::RwLock;
#[macro_use]
extern crate lazy_static;lazy_static! {static ref HASHMAP: HashMap<u32,String> = {let mut m = HashMap::new();m.insert(0, "foo".into());m.insert(1, "bar".into());m.insert(2, "baz".into());m};
}fn main(){// 非全局式{let mut hp = HashMap::new();hp.insert("1".to_string(),1);let lock_1 = Arc::new(RwLock::new(hp));//多个线程读写{println!("single thread write =>");let mut w = lock_1.write().unwrap();(*w).insert("2".to_string(),2);}{println!(" single thread read =>");let r = lock_1.read().unwrap();println!("r:{:?} {:?}",1,*r);}{println!("multi  readers => ");for i in 0..10{let lock = lock_1.clone();thread::spawn(move ||{let r = lock.read().unwrap();println!("r:{:?} {:?}",i,*r);}); } }{println!("multi  writers => ");for i in 0..10{let lock = lock_1.clone();thread::spawn(move ||{let mut _w = lock.write().unwrap();(*_w).insert(i.to_string(),i*i);println!(":{:?} {:?}",i,*_w);}); } }}println!("RwLock=> mode");//全局式{let lock_1 = RwLock::new(HASHMAP.clone());//一个写,多个读// .read(); .write(){println!("single thread write =>");let mut w = lock_1.write().unwrap();(*w).insert(2,"2".to_string());println!("*w =>{:?}",*w);}{println!(" single thread read =>");let r = lock_1.read().unwrap();println!("r:{:?} {:?}",1,r);}}std::thread::sleep(std::time::Duration::from_secs(100));
}

Rust : RwLock读写锁相关推荐

  1. Linux多线程实践(6) --Posix读写锁解决读者写者问题

    Posix读写锁 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restr ...

  2. 【Linux系统编程】线程同步与互斥:读写锁

    读写锁基本原理 当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住.但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互 ...

  3. linux库函数pthread.h------pthread_rwlock_t读写锁说明

    读写锁 索引: 初始化一个读写锁pthread_rwlock_init 读锁定读写锁 pthread_rwlock_rdlock 非阻塞读锁定 pthread_rwlock_tryrdlock 写锁定 ...

  4. c/c++:线程同步(互斥锁、死锁、读写锁、条件变量、生产者和消费者模型、信号量)

    目录 1. 概念 2. 互斥锁 3. 死锁 4. 读写锁 5. 条件变量 5.1 生产者和消费者模型 6. 信号量 1. 概念 线程同步: > 当有一个线程在对内存进行操作时,其他线程都不可以对 ...

  5. Linux学习之系统编程篇:读写锁(pthread_ rwlock _init / rdlock / wrlock / unlock / destroy)

    一.读写锁的认识 (1)读写锁是1把锁. (2)读写锁的类型: pthread_rwlock_t lock 又分"读锁"(不让读内存)和"写锁"(不让写内存) ...

  6. Linux线程同步读写锁 rwlock

    读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁. 1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞: 2 ...

  7. Linux多线程的同步------读写锁

    前面介绍过Linux多线程同步的另外两个方法------互斥锁和信号量 Linux多线程的同步-----信号量和互斥锁_神厨小福贵!的博客-CSDN博客 下面来看一下读写锁: 读写锁和互斥锁都带有一个 ...

  8. 互斥量、读写锁长占时分析的利器——valgrind的DRD

    在进行多线程编程时,我们可能会存在同时操作(读.写)同一份内存的可能性.为了保证数据的正确性,我们往往会使用互斥量.读写锁等同步方法.(转载请指明出于breaksoftware的csdn博客) 互斥量 ...

  9. 嵌入式 自旋锁、互斥锁、读写锁、递归锁

    互斥锁(mutexlock): 最常使用于线程同步的锁:标记用来保证在任一时刻,只能有一个线程访问该对象,同一线程多次加锁操作会造成死锁:临界区和互斥量都可用来实现此锁,通常情况下锁操作失败会将该线程 ...

  10. ReentrantReadWriteLock读写锁

    关注微信公众号JavaStorm获取最新文章. JavaStorm 概述 ​ ReentrantReadWriteLock是Lock的另一种实现方式,我们已经知道了ReentrantLock是一个排他 ...

最新文章

  1. 【DeepLearning】Exercise:Sparse Autoencoder
  2. 提前体验「iPhone30」:7比32超长显示器,刷微博神器来了
  3. SQL Server 2005 SP2发布了,开发人员怎么办?
  4. 用eclipse创建WebService项目
  5. SSM+Netty项目结合思路
  6. 风机桨叶故障诊断(四) 正负样本准备——从图像中随机扣图
  7. 2017-2018-1 20155229 《信息安全系统设计基础》第十四周学习总结
  8. android事务队列处理的实现
  9. html图标框架中文版,常见css框架有哪些?
  10. MyBatis--动态插入多条数据
  11. python输出间隔_在python中生成间隔之间的月份列表
  12. 工具-IDM(Google浏览器下载插件)
  13. 浅谈Struts2拦截器的原理与实现
  14. 如何使用Logitech Harmony遥控器控制智能家居设备
  15. 韩国NF数字功放芯片在家庭影院领域中的应用
  16. [长安战疫-cazy] Web题解
  17. Linux 清理 firewalld 和 iptables 所有规则
  18. java常见笔试编程题_9道常见的java笔试选择题
  19. GET和POST的不同
  20. Scratch软件编程等级考试三级——20200319

热门文章

  1. 7.10 添加房间参数
  2. nginx平滑升级至最新版的nginx-1.9.5
  3. ubuntu下切换到root用户
  4. CSDN西安分站俱乐部聚会归来记
  5. innodb存储引擎之内存
  6. Python中如何获取类属性的列表
  7. svn提交报错Previous operation has not finished; run 'cleanup' if it was interrupted
  8. @JVM垃圾收集器种类
  9. Java:for循环出现for(int i : arr)
  10. win32SDK的hello,world程序(二)