C++互斥锁与读写锁

1.互斥锁

std::mutex是c++中最常用的互斥锁,所谓互斥是指线程间互斥:共享变量只能被一个线程独占。

C++多线程:互斥锁_HerofH_的博客-CSDN博客_c++互斥锁原理目录1.前言2.互斥锁2.1 互斥锁的特点2.2 互斥锁的使用2.2 std::lock_guard3.死锁3.1 死锁的含义3.2 死锁的例子3.3 死锁的解决方法1.前言 比如说我们现在以一个list容器来模仿一个消息队列,当消息来临时插入list的尾部,当读取消息时就把头部的消息读出来并且删除这条消息。在代码中就以两个线程分别实现消息写...https://blog.csdn.net/qq_28114615/article/details/883670162.读写锁

c++中定义的读写锁:std::shared_mutex。当一个变量只被一个线程写,被多个线程读时,可以通过读写锁来提升效率,此时如果用互斥锁会导致线程阻塞。

c++ - C++ 并发编程(七):读写锁(Read-Write Lock)_个人文章 - SegmentFault 思否STL 和 Boost 都提供了 shared_mutex 来解决「读者-写者」问题。shared_mutex 这个名字并不十分贴切,不如 pthread 直呼「读写锁」。https://segmentfault.com/a/11900000069418703.系统提供的互斥锁和读写锁

在Linux系统上,可使用pthread.h的API创建线程。比如pthread_create()。

        pthread.h符合POSIX标准,适用于类Unix、Linux系统。也有兼容Windows的版本——pthreads-w32。
        编译时要链接pthread库,比如:gcc test.c -o test -l pthread
C11制定了一个标准的线程库threads.h,但部分编译器不支持它。

C语言用pthread.h创建线程_LeoHsiao1的博客-CSDN博客_pthread.hC语言的线程库pthread.h的APIpthread.h的示例C语言的线程库在Linux系统上,可使用pthread.h创建线程。比如pthread_create()。pthread.h符合POSIX标准,适用于类Unix、Linux系统。也有兼容Windows的版本——pthreads-w32。编译时要链接pthread库,比如:gcc test.c -o test -l pt...https://blog.csdn.net/qq_35952638/article/details/100189435

C++的互斥锁和读写锁速度比较实战_chengqiuming的博客-CSDN博客一代码#include <stdio.h>#include <unistd.h>#include <pthread.h>#include <sys/time.h>#include <string.h>#include <cstdlib>int gcn = 0;pthread_mutex_t mutex;...https://blog.csdn.net/chengqiuming/article/details/89283038

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,使用互斥锁来保护一个`std::vector`的访问可以确保线程安全。由于`std::vector`是一个可变大小的容器,多个线程同时对其进行读写操作可能导致竞争条件和数据损坏。 下面是一个使用互斥锁保护`std::vector`的示例: ```cpp #include <iostream> #include <thread> #include <vector> #include <mutex> std::vector<int> myVector; std::mutex mtx; void addToVector(int value) { std::lock_guard<std::mutex> lock(mtx); // 锁定互斥锁 myVector.push_back(value); // 在函数结束时自动释放互斥锁 } int main() { std::thread t1(addToVector, 1); std::thread t2(addToVector, 2); t1.join(); t2.join(); // 输出向量的内容 for (const auto& value : myVector) { std::cout << value << " "; } std::cout << std::endl; return 0; } ``` 在上面的示例中,`std::vector<int>`对象`myVector`是被多个线程访问的共享资源。通过在`addToVector`函数中使用`std::lock_guard<std::mutex>`来锁定互斥锁`mtx`,确保每个线程在访问和修改`myVector`之前先获得锁。这样可以避免多个线程同时修改`myVector`而导致数据不一致的问题。 使用互斥锁来保护`std::vector`的访问确保了线程安全性,但可能会带来性能开销。在某些情况下,如果读操作远远多于写操作,可以考虑使用读写锁(`std::shared_mutex`)来提高并发性能。读写锁允许多个线程同时读取共享资源,但在有线程进行写入时,其他线程无法进行读取或写入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值