当前位置: 首页 > 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.yayakq.cn/news/852198/

相关文章:

  • 谁专门做网站安全维护wordpress使用手册
  • 做宠物网站导航应该写什么字酒店网站开发合同
  • 鞍山做网站专业公司公司网站如何制作
  • 重庆一品建设集团有限公司网站做网站开发电脑配置
  • 网站ui设计师专做五金正品的网站
  • 东坑仿做网站做网站需要学什么语言
  • 个人cms网站wordpress 4.9 正式版
  • 宁波企业网站建设wordpress建单页面论坛
  • 新网站建设方案pptwordpress直排主题
  • 网站空间后台公司介绍模板word
  • 网站建设制作好评语衡水做网站建设
  • 昆明 网站搭建北京网站制作百度推广
  • 郑州网站建设套餐做网站公司赚钱吗?
  • php网站开发目的兴宁房产网
  • 深圳做网站的人怎样免费制作网站
  • 免费网站推广网址上海响应式网站建设
  • 怎么做物流网站网站会员等级审核功能怎么做
  • 南京 网站制作公司陕西省建设网官网陕西省建筑市场监督与诚信信息一体化平台
  • 在线做网站图标做外贸有免费的网站吗
  • 网站 谁建设 谁负责ie浏览器官方网址入口
  • 公司如何做网站一般多少钱python基础代码
  • 冠县做网站哪里好游戏开服网
  • 电影资源网站怎么做网络规划设计师是高级工程师吗
  • 建个人网站一般多少钱工具用具使用费是指企业施工生产
  • 内力网站建设网站备案查询工具
  • 报纸做垂直门户网站京东商城网上购物官网
  • 做网站的总结成都住房和城乡建设厅网站首页
  • 虚拟主机空间发布网站品牌推广多少钱
  • 知乎网站建设培训设计软件
  • 做app和网站深圳宝安建网站