c++ 多个线程读一个线程写同步

简介: 这种情况一般多个线程读是不需要加锁的。就在写的时候需要加锁。 那么要做的就是让不写的时候,读不受同步限制。让多线程自由的读。 这个时候就要用读写锁 boost已经有读写锁,而c++ 14才有读写锁。

这种情况一般多个线程读是不需要加锁的。就在写的时候需要加锁。

那么要做的就是让不写的时候,读不受同步限制。让多线程自由的读。

这个时候就要用读写锁

boost已经有读写锁,而c++ 14才有读写锁。

std::shared_mutex write; //use boost's or c++14 

// One write, no reads.
void write_fun()
{
    std::lock_guard<std::shared_mutex> lock(write);
    // DO WRITE
}

// Multiple reads, no write
void read_fun()
{
    std::shared_lock<std::shared_mutex> lock(write);
    // do read
}

 

相关文章
|
3月前
|
Java API 调度
线程的操作
本文详细介绍了线程的开启、终止、等待和休眠。首先解释了`start`与`run`的区别:`start`用于真正创建线程并调用系统API,而`run`则是线程执行的具体任务。接着讨论了线程终止的两种方式:通过共享标记和调用`interrupt()`方法。文中还分析了使用`join()`方法实现线程等待的机制,并展示了如何通过`Thread.sleep()`让线程休眠以降低CPU占用率。这些内容通过实例代码和图示进行了清晰说明。
31 0
线程的操作
|
4月前
|
算法 Java
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
该博客文章综合介绍了Java并发编程的基础知识,包括线程与进程的区别、并发与并行的概念、线程的生命周期状态、`sleep`与`wait`方法的差异、`Lock`接口及其实现类与`synchronized`关键字的对比,以及生产者和消费者问题的解决方案和使用`Condition`对象替代`synchronized`关键字的方法。
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
|
7月前
线程间的同步的方式有哪些
线程间的同步的方式有哪些
|
Java 调度
深入理解线程与并发
深入理解线程与并发
|
安全 数据安全/隐私保护
线程互斥、同步(二)
线程互斥、同步
65 1
|
安全 程序员 编译器
线程互斥、同步(一)
线程互斥、同步
87 1
|
调度 C++
进程、线程、并发、并行、同步、异步、阻塞、非阻塞
乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。
|
调度
线程的状态及阻塞
之前提到了线程和进程,那就提一下线程的状态吧!
243 0
线程的阻塞
相信像我一样的初学者遇到线程阻塞时会感到无助,那我就把自己对于线程阻塞的理解记录下来吧!
172 0
线程的同步
线程的同步
126 0

相关实验场景

更多