第6章 基于锁的并发数据结构设计

本章主要内容

※并发数据结构设计的意义 指导如何设计

※实现为并发设计的数据结构

在上一章中,我们对底层原子操作和内存模型有了详尽的了解。在本章中,我们将先将底层 的东西放在一边(将会在第7章再次提及),来对数据结构做一些讨论。

数据结构的选择,对于程序来说,是其解决方案的重要组成部分,当然,并行程序也不例 外。如果一种数据结构可以被多个线程所访问,其要不就是绝对不变的(其值不会发生变化, 并且不需同步),要不程序就要对数据结构进行正确的设计,以确保其能在多线程环境下能够 (正确的)同步。一种选择是使用独立的互斥量,其可以锁住需要保护的数据(这种方法已经在 第3和第4章中提到),另一种选择是设计一种能够并发访问的数据结构。

在设计并发数据结构时,你可以使用基本多线程应用中的构建块(之前章节中有提及),比如, 互斥量和条件变量。当然,你也已经在之前的章节的例子中看到,怎样联合不同的构建块, 对数据结构进行写入,并且保证这些构建块都是在并发环境下是线程安全的。

在本章,我们将了解一些并发数据结构设计的基本准则。然后,我们将再次重温锁和条件变 量的基本构建块。最后,会去了解更为复杂的数据结构。在第7章,我们将了解,如何正确 的“返璞归真”,并使用第5章提到的原子操作,去构建无锁的数据结构。

好吧!多说无益,让我们来看一下并发数据结构的设计,都需要些什么。

第6章 基于锁的并发数据结构设计相关推荐

  1. qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...

    本章主要内容 设计并发数据结构的含义 设计指南 并发数据结构的示例实现 在上一章中我们了解了底层原子操作和内存模型.本章我们先把底层的细节放一放(尽管在第7章我们将需要它们),探讨一下数据结构. 为编 ...

  2. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  3. rls算法matlab实现,第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现.PDF

    第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现 第 5章 基于 RLS算法的数据预测与 第5章 基于RLS算法的数据预测与MATLAB实现 MATLAB实现 RLS 1795 递归最 ...

  4. python大数据分析股票对比_Python大数据分析与挖掘实战 第7章 基于财务与交易数据的量化投资分析.pptx...

    ;随着我国证券市场的不断壮大,证券及证券投资在社会经济生活中的地位也越来越重要,上市公司的数量也不断增加,目前在上海证券交易所和深圳证券交易所上市交易的公司已经达到3700多家.投资者面对如此众多的不 ...

  5. Java架构-每秒上千订单场景下的分布式锁高并发优化实践!

    "上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:<拜托,面试请不要再问我Redis分布式锁实现原理>. 今天就给大 ...

  6. 第 4 章 MySQL 锁机制

    第 4 章 MySQL 锁机制 1.概述 1.1.锁的定义 锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也 ...

  7. Go入门系列(十七) go并发之基于共享变量的并发

    本系列文章目录 展开/收起 Go入门系列(一) 初识Go语言 Go入门系列(二) 变量.指针.数据类型简介和作用域 Go入门系列(三) 基础类型--整型.浮点型.布尔类型和字符串 Go入门系列(四) ...

  8. 19.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)

    老王:小陈啊,上一章我们讲解了cas的缺陷,无法同时更新多个变量.以及ABA的问题.以及如果使用AtomicReference解决同时更新多个变量,如果使用AtomicStampedReference ...

  9. Go基于共享变量的并发原理及实例 【Go语言圣经笔记】

    基于共享变量的并发 前一章我们介绍了一些使用goroutine和channel这样直接而自然的方式来实现并发的方法.然而这样做我们实际上回避了在写并发代码时必须处理的一些重要而且细微的问题(笔者注:一 ...

最新文章

  1. PHP开发错误锦集(持续更新)
  2. 2.最详细的WSDD配置文件注释
  3. docker 挂载目录_完美解决:Docker部署SpringBoot项目后图片无法访问和上传,3招搞定!...
  4. 在Qt4中使用QPersistentModelIndex传递QModelIndex
  5. log4j.properties配置详解与实例
  6. aspen二元体系共沸组分_超详细 | 手把手教你组分结构预测
  7. Macosx 安装 ionic 成功教程
  8. Windows 10 使用 Kali Linux子系统
  9. 混合类型数据格式化输入
  10. 还没有女朋友的朋友们,你们有福了,学会CycleGAN把男朋友变成女朋友
  11. 小程序 省市区地址选择器
  12. 免费复制百度文库的方法
  13. 基于MATLAB语音分析处理系统
  14. 常用组合数计算公式及推算
  15. mvc:annotation-driven:注解驱动
  16. kali清理_linux下清理系统垃圾
  17. 三年打造AI芯片黑科技,IBM“狩猎女神之矛”将撬动企业混合云
  18. 微信小程序picker组件
  19. matlab xpc 环境pci板卡驱动编写,XPC环境下PCI板卡驱动
  20. eclipse插件安装失败的列表如何清除-一个困扰很久的问题

热门文章

  1. ubuntu之修改硬盘名称
  2. 计算机基础的算法思想
  3. 中如何设置电气栅格_游戏中的设置界面如何设计?
  4. python正确方法_下列定义函数的方法,在Python中正确的是()。
  5. 页面全部按钮变成disabled=true_手机也能制作大片!只需轻松几步就能把照片变成视频。...
  6. 201509-1-数列分段
  7. 《HTML5移动Web开发实战》—— 1.6 在移动网站中使用HTML5
  8. Tomcat的安装、配置常见问题
  9. oracle gENT,Oracle 11g r2 新建空表不分配semgent
  10. css修改输入框的placeholder颜色