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

教育培训网站排名营销宣传方式有哪些

教育培训网站排名,营销宣传方式有哪些,传媒公司经营范围有哪些,荆门建设局官方网站C++并发编程:构建线程安全队列(第二部分:细粒度锁) 1. 引言 在多线程环境下,为了保证数据的一致性和正确性,需要使用同步原语来对共享数据的访问进行互斥和同步。std::queue作为一种先进先出(FIFO)的数据结构,它本身并不是线程安全的,同时访问它可能导致数据竞争和不一致的问…

C++并发编程:构建线程安全队列(第二部分:细粒度锁)

1. 引言

在多线程环境下,为了保证数据的一致性和正确性,需要使用同步原语来对共享数据的访问进行互斥和同步。std::queue作为一种先进先出(FIFO)的数据结构,它本身并不是线程安全的,同时访问它可能导致数据竞争和不一致的问题。

所以在多线程环境下,我们需要构建一个线程安全的队列,使其可以安全地被多个线程同时访问,而不会出现数据竞争。这里我们使用C++11中的一些新特性如std::shared_ptrstd::unique_ptrstd::mutexstd::condition_variable等来实现一个线程安全队列。

2. 设计要点

线程安全队列的关键设计要点包括:

  • 使用互斥量保护队列的头尾指针,使多线程不能同时修改队列结构
  • 使用条件变量实现线程之间的通知和等待,避免忙等待(busy waiting)
  • 提供多种不同的访问接口如阻塞、非阻塞、等待获取等,增强队列的实用性
  • 使用std::shared_ptrstd::unique_ptr等智能指针管理内存,避免手动new/delete带来的问题
  • 尽量减少锁的粒度,例如头尾指针使用不同的锁,以提高并发性

下面我们来看一下这个线程安全队列的具体设计和实现。

3. 队列的节点结构

队列节点node使用一个std::shared_ptr保存数据,和一个std::unique_ptr指向下一节点:

struct node
{std::shared_ptr<T> data;std::unique_ptr<node> next;
};

使用shared_ptr而不是原始指针管理数据,可以自动释放内存,避免泄漏。unique_ptr则保证节点间的引用关系唯一,方便传递所有权。

4. 队列结构

队列结构包含头尾指针、互斥量和条件变量:

std::mutex head_mutex;
std::unique_ptr<node> head;std::mutex tail_mutex; 
node* tail;std::condition_variable data_cond;

头指针使用unique_ptr且初始化为一个哑节点。尾指针使用原始指针,初始化指向哑节点。

头尾指针分别使用head_mutextail_mutex保护,以减小锁的粒度,不同指针可以并发修改。

条件变量data_cond用于在队列为空时等待,并在有数据可获取时发出通知。

5. 主要接口

队列主要提供下面一些接口:

5.1 非阻塞获取

try_pop尝试非阻塞地弹出队头元素,如果队列为空则直接返回:

std::shared_ptr<T> try_pop() 
{std::lock_guard<std::mutex> head_lock(head_mutex);if (head.get() == get_tail()) {return {}; }return std::move(head->data);
}

仅对头指针上锁,执行常数时间操作,可并发访问。

5.2 阻塞获取

wait_and_pop会在队列为空时等待,直到有元素入队后唤醒线程并返回数据:

std::shared_ptr<T> wait_and_pop()
{std::unique_lock<std::mutex> head_lock(wait_for_data());return std::move(head->data); 
}std::unique_lock<std::mutex> wait_for_data()
{std::unique_lock<std::mutex> 
http://www.wangmingla.cn/news/92688.html

相关文章:

  • 自己做传奇sf网站沈阳seo优化新势力
  • 中国能建招商平台seo指的是什么意思
  • 网站安全管理机制建设广州番禺发布
  • 可以做片头的网站奶茶店推广软文500字
  • mt4外汇网站建设重庆seowhy整站优化
  • 网站设计范例企业查询app
  • 电子商务网站规书怎么做市场推广
  • 我想找网站帮忙做宣传目前最好的营销模式
  • 怎么做代刷网站长网站整站优化推广方案
  • 什么做书籍的网站什么是网站推广策略
  • 郑州网站建设网站制作开发网站用什么软件
  • 河南微网站开发百度竞价排名叫什么
  • app软件开发专业公司seo免费推广软件
  • 我要找个做网站的公司淘宝怎么推广自己的产品
  • 做网站你们用什么浏览器推广之家官网
  • 深圳大型互联网公司人员优化是什么意思
  • 外网访问wordpress无法正常显示徐州网站建设方案优化
  • 网站知名度游戏推广平台代理
  • 网站设置专栏成都新一轮疫情
  • 有网络网站打不开怎么回事文明seo技术教程网
  • 跳转网站怎么做的阿里云空间+1对1私人专属设计师
  • 免费做情网站吸引人的软文标题例子
  • 怎样在阿里云做网站推广引流渠道
  • 网站制作 发票seo规范培训
  • 深圳微信网站建设公司哪家好专业做网站的公司
  • 番禺网站建设a2345上海b2b网络推广外包
  • 网站开发课程介绍余姚网站seo运营
  • 哪个网站专门做邮轮旅游的搜索引擎优化的含义和目标
  • 企业网站的开发与应用营销推广策略
  • 作业3 主题资源网站建设百度竞价调价软件