当前位置: 首页 > news >正文

评价一个网站的好坏如何注册网站免费注册

评价一个网站的好坏,如何注册网站免费注册,平面设计的网站有哪些网站,郑州做网站最好的公司一、简介 读写锁(Read-Write Lock)是一种并发控制机制,用于多线程环境中实现对共享资源的高效读写操作。读写锁允许多个线程同时读取共享资源,但在有写操作时,需要互斥地独占对共享资源的访问,以确保数据的…

一、简介

读写锁(Read-Write Lock)是一种并发控制机制,用于多线程环境中实现对共享资源的高效读写操作。读写锁允许多个线程同时读取共享资源,但在有写操作时,需要互斥地独占对共享资源的访问,以确保数据的一致性。

二、shared_mutex

std::shared_mutex 是 C++17 引入的,用于实现共享/独占访问控制,以下是简单示例:

#include <iostream>
#include <thread>
#include <shared_mutex>std::shared_mutex rwLock;
int sharedData = 0;  // 共享资源void readerFunction(int id) {while (true) {rwLock.lock_shared();std::cout << "Reader " << id << " reads sharedData: " << sharedData << std::endl;rwLock.unlock_shared();// 模拟一些耗时操作std::this_thread::sleep_for(std::chrono::milliseconds(500));}
}void writerFunction(int id) {while (true) {rwLock.lock();sharedData++;std::cout << "Writer " << id << " writes sharedData: " << sharedData << std::endl;rwLock.unlock();// 模拟一些耗时操作std::this_thread::sleep_for(std::chrono::milliseconds(1000));}
}int main() {const int numReaders = 3;const int numWriters = 3;std::thread readers[numReaders];std::thread writers[numWriters];// 启动线程for (int i = 0; i < numReaders; i++) {readers[i] = std::thread(readerFunction, i);}for (int i = 0; i < numWriters; i++) {writers[i] = std::thread(writerFunction, i);}// Join线程for (int i = 0; i < numReaders; i++) {readers[i].join();}for (int i = 0; i < numWriters; i++) {writers[i].join();}return 0;
}

三、自定义 ReadWriteLock

C++17前可以通过 mutexcondition_variable 实现一个自定义的读写锁。代码如下:

#include <mutex>
#include <condition_variable>class ReadWriteLock {
public:ReadWriteLock() : readersCount(0), writing(false) {}void lockRead() {std::unique_lock<std::mutex> lock(mutex_);readCondition_.wait(lock, [this] { return !writing; });readersCount++;}void unlockRead() {std::unique_lock<std::mutex> lock(mutex_);readersCount--;if (readersCount == 0) {writeCondition_.notify_one();}}void lockWrite() {std::unique_lock<std::mutex> lock(mutex_);writeCondition_.wait(lock, [this] { return readersCount == 0 && !writing; });writing = true;}void unlockWrite() {std::unique_lock<std::mutex> lock(mutex_);writing = false;readCondition_.notify_all();writeCondition_.notify_one();}private:std::mutex mutex_;std::condition_variable readCondition_;std::condition_variable writeCondition_;int readersCount;bool writing;
};

使用示例:

#include <iostream>
#include <thread>
#include "ReadWriteLock.hpp" // 包含上面ReadWriteLock的头文件int sharedData = 0;  // 共享数据
ReadWriteLock rwLock;void readerFunction(int id) {while (true) {rwLock.lockRead();std::cout << "Reader " << id << " reads sharedData: " << sharedData << std::endl;rwLock.unlockRead();// 模拟一些耗时操作std::this_thread::sleep_for(std::chrono::milliseconds(500));}
}void writerFunction(int id) {while (true) {rwLock.lockWrite();sharedData++;std::cout << "Writer " << id << " writes sharedData: " << sharedData << std::endl;rwLock.unlockWrite();// 模拟一些耗时操作std::this_thread::sleep_for(std::chrono::milliseconds(1000));}
}int main() {const int numReaders = 3;const int numWriters = 3;std::thread readers[numReaders];std::thread writers[numWriters];// 启动线程for (int i = 0; i < numReaders; i++) {readers[i] = std::thread(readerFunction, i);}for (int i = 0; i < numWriters; i++) {writers[i] = std::thread(writerFunction, i);}// Join线程for (int i = 0; i < numReaders; i++) {readers[i].join();}for (int i = 0; i < numWriters; i++) {writers[i].join();}return 0;
}
http://www.mnyf.cn/news/49487.html

相关文章:

  • 政府网站方案书佛山做网站建设
  • 山西做网站优势广州百度推广客服电话多少
  • 温州网站开发定制搜索引擎优化seo的英文全称是
  • 聊城网站开发培训下载安装百度
  • 自己怎样制作公司网站郑州优化网站公司
  • 佛山网站建设外包公司如何设计与制作网页
  • 网站建设工作目标免费刷seo
  • 管理网站模板下载免费下载域名权重是什么意思
  • 阜阳网站建设公司建什么网站可以长期盈利
  • 网站规划与设计方向视频广告
  • 淘宝做轮播广告哪个网站好seo短期培训班
  • 网站怎么做交易最新seo网站优化教程
  • 上海网站建设建站济宁百度竞价推广
  • 潮阳建设局网站网站排名优化查询
  • wordpress菜单右置seo网站优化专家
  • 顺德新网站建设百度推广优化怎么做的
  • 如何注册个人营业执照青岛seo网络推广
  • 商丘网站建设专业现状外链推广
  • 网站建设 提案 框架产品市场推广计划书
  • 网站怎么做支付宝接口信息发布推广方法
  • 北京的广告公司网站建设本周国内新闻
  • 直播网站开发步骤爱网站查询挖掘工具
  • 锦州微商网站制做预测2025年网络营销的发展
  • 宜宾网站建设88sou软文写作经验
  • 手机html5网站源码百度关键词优化多久上首页
  • 个人网站论坛展示地推任务网
  • 网站建设跑业务跨境电商有哪些平台
  • 网络投放广告山东seo多少钱
  • 南昌网站搭建长春seo关键词排名
  • 如果做好招聘网站建设深圳推广公司哪家正规