【C++/Linux复习知识点】锁

news/2024/11/30 0:48:37/

std::mutex

最普通的互斥锁,谁竞争到改锁,谁访问临界资源

std::mutex mtx;
int shared_data = 0;void add() {mtx.lock();shared_data++;mtx.unlock();
}int main() {std::thread t1(add);std::thread t2(add);t1.join();t2.join();std::cout << "Shared data: " << shared_data << std::endl;return 0;
}

std::recursive_mutex

递归锁,普通的锁是不能递归的,一个线程加锁后,再递归,会导致死锁

std::recursive_mutex rmtx;
int shared_data = 0;void add(int depth) {std::cout << std::this_thread::get_id() << std::endl;if (depth <= 0) {return;}rmtx.lock();++shared_data;add(depth-1);rmtx.unlock();
}int main() {std::thread t1(add, 5);std::thread t2(add, 5);t1.join();t2.join();std::cout << "Shared data: " << shared_data << std::endl;return 0;
}

std::timed_mutex

尝试加锁有时间限制,若超过了这个时间,就自动释放锁,并返回加锁失败

std::timed_mutex tmtx;
int shared_data = 0;void add() {if (tmtx.try_lock_for(std::chrono::seconds(2))) {++shared_data;std::this_thread::sleep_for(std::chrono::seconds (1));tmtx.unlock();} else {std::cout << "Timeout, could not lock mutex." << std::endl;}
}int main() {std::thread t1(add);std::thread t2(add);t1.join();t2.join();std::cout << "shared_data: " << shared_data << std::endl;return 0;
}

std::shared_mutex

读写锁,可以允许多个读者读,但是写的时候,只允许有一个写者;注意读者加锁用的 shared_lock

std::shared_mutex smtx;
int shared_data = 0;void read_data() {std::shared_lock<std::shared_mutex> lock(smtx);std::cout << "Read data: " << shared_data << std::endl;
}void write_data(int value) {std::unique_lock<std::shared_mutex> lock(smtx);shared_data = value;std::cout << "Write data: " << shared_data << std::endl;
}int main() {std::vector<std::thread> readers;for (int i = 0; i < 5; ++i) {readers.push_back(std::thread(read_data));}std::thread writer(write_data, 42);for (auto& t : readers) {t.join();}writer.join();return 0;
}

linux中的读写锁

man 3 pthread_rwlock_init

  1. 初始化读写锁
pthread_rwlock_init(pthread_rwlock_t* restrict rwlock,const pthread_rwlockattr_t* restrict attr );
  1. 销毁读写锁
pthread_rwlock_destroy(pthread_rwlock_t* rwlock);
  1. 加读锁
pthread_rwlock_rdlock(pthread_rwlock_t* rdlock);
  1. 加写锁
pthread_rwlock_wrlock(pthread_rwlock_t* rwlock);
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>int number=0;
pthread_rwlock_t rwlock;
void *write_pthread(void * arg)
{while(1){       //加写锁pthread_rwlock_wrlock(&rwlock);number++;printf("write_pthread id:%ld, number is %d\n",pthread_self(),number);pthread_rwlock_unlock(&rwlock);//解锁sleep(1);}
}
void *read_pthread(void * arg)
{while(1){       //加读锁pthread_rwlock_wrlock(&rwlock);printf("read_pthread id: %ld,number is %d\n",pthread_self(),number);pthread_rwlock_unlock(&rwlock);//解锁sleep(1);}
}int main()
{pthread_t p[8];pthread_rwlock_init(&rwlock,NULL);for(int i=0;i<3;i++){pthread_create(&p[i],NULL,write_pthread,NULL);}for(int i=3;i<8;i++){pthread_create(&p[i],NULL,read_pthread,NULL);}for(int j=0;j<8;j++){pthread_join(p[j],NULL);}return 0;
}

http://www.ppmy.cn/news/691858.html

相关文章

比亚迪汉改装鸿蒙系统,搭载鸿蒙系统的比亚迪汉上市,华为余承东亲自站台打Call...

7月12日晚间&#xff0c;比亚迪汉正式上市。值得注意的是&#xff0c;华为消费者CEO余承东亲自现身发布会现场&#xff0c;与比亚迪总裁王传福同框&#xff0c;为新品打Call&#xff0c;也成为本场发布会的一大亮点。 发布会之前&#xff0c;余承东曾亲自试驾体验了比亚迪汉&am…

mios系统和鸿蒙,继华为之后又一国产手机将用上自研系统 小米miOS会成为现实吗...

花火网消息&#xff0c;小米要造自己的系统这回事其实并非突然之间的事情了&#xff0c;在2014年小米就已经计划打造自己的操作系统&#xff0c;名为MiOS&#xff0c;不过看起来MiOS还没有正式发布&#xff0c;华为就要先拿出自己的鸿蒙OS了。 鸿蒙OS(英文&#xff1a;Harmony …

win10装鸿蒙双系统,win10下能装双系统教程

网友的电脑系统是win10的,但是网友又使用win8系统,但是不知道如何win10下能装双系统,这就让他们抓破了头脑,就来问小编我,如何win10安装双系统,那么就让小编告诉你们win10下能装双系统教程。 一、为windows10创建一个新的安装分区 首先我们需要为接下来的windows10预览版…

以云数据库MySQL为例深入分析对比:华为云更安全还是腾讯云更安全?

前言 日新月异的今天&#xff0c;互联网&#xff0c;云计算已经被广泛的应用到生活的方方面面上。对个人而言&#xff0c;我们时时刻刻都需要从网络获取信息&#xff0c;在网上冲浪。而对于企业而言&#xff0c;数据上云&#xff0c;应用上云已经成了一个不可逆的趋势。 而华为…

以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全?

以云数据库产品为例深度对比分析&#xff1a;华为云更安全还是阿里云更安全&#xff1f; 博主介绍目前市场云阿里云阿里云云原生关系型数据库 PolarDB MySQL引擎什么是PolarDB产品优势产品架构一写多读计算与存储分离读写分离高速链路互联共享分布式存储数据多副本、Parallel-R…

鸿蒙系统概述(HarmonyOS)学习这一篇就够了!

鸿蒙系统概述&#xff08;HarmonyOS&#xff09; 我们可以从以下三个主要方面进行概述&#xff1a;系统定义、技术特征、系统安全。 目录 鸿蒙系统概述&#xff08;HarmonyOS&#xff09; 系统定义 系统定位 技术架构 内核层 系统服务层 框架层 应用层 技术特性 硬…

【云驻共创】云原生应用架构之企业核心业务未来架构演进路线及华为云方案

文章目录 前言一、企业核心业务架构演进1.企业核心业务应用架构和集成架构发展历程1.1 企业核心业务应用架构发展历程1.1.1 单体架构1.1.1.1 特点1.1.1.2 优点1.1.1.3 缺点 1.1.2 垂直架构1.1.2.1 特点&#xff1a;1.1.2.2 优点&#xff1a;1.1.2.3 缺点&#xff1a; 1.1.3 SOA…

鸿蒙系统摄像头,内置鸿蒙系统,华为生态产品海雀智能摄像头Pro体验

提起华为鸿蒙系统&#xff0c;估计很多人都不陌生&#xff0c;作为一款分布式操作系统&#xff0c;目前已经在华为智慧屏、华为手表、九阳、美的等产品中内置了鸿蒙系统&#xff0c;手机鸿蒙系统目前正在内测&#xff0c;估计很快大多数华为荣耀手机都可以升级鸿蒙系统了。作为…