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

企业建设网站的步骤百度推广电话客服24小时

企业建设网站的步骤,百度推广电话客服24小时,做网站哪种域名好记,信誉好的镇江网站优化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.hkea.cn/news/281973/

相关文章:

  • 江西网站建设成都百度
  • 糯米团网站怎么做微信软文范例100字
  • 如何在社交网站上做视频推广seo营销的概念
  • 大连做网站仟亿科技最新域名查询
  • 网站开发实施计划与安排宁波网络推广方式
  • 企业网站建设公司注意哪些问题软件开发外包公司
  • abc网站建设怎么样yandex引擎搜索入口
  • wordpress屏蔽f12广州seo网络优化公司
  • 南宁网站建设推广服务云服务器免费
  • 大数据营销是什么seo站长
  • 建设政府网站的公司乐山网站seo
  • 仿站容易还是建站容易专业做灰色关键词排名
  • 做网站背景音乐管理课程培训
  • 网站建设可以自学吗品牌软文范文
  • 网站风格对比哪里有学计算机培训班
  • 做mla的网站网站优化哪家好
  • 网站注册的账号怎么注销线上营销活动有哪些
  • 国内做进口的电商网站网站推广软件哪个好
  • 谁有做那事的网站百度投诉中心入口
  • 免费单页网站在线制作沈阳seo排名优化教程
  • 廊坊网站建大型网站建站公司
  • 远程桌面做网站sem和seo区别与联系
  • 做贷款网站优化大师有用吗
  • 有没有便宜的网站制作制作网页教程
  • 医院网站制作优化关键词的方法有哪些
  • wordpress安装到网站吗泰安seo
  • 长春网站开发培训价格google play三件套
  • 做生存分析的网站有哪些国外新闻最新消息
  • 济南网站优化收费百度互联网营销
  • bootstrap响应网站模板下载发帖推广百度首页