读书笔记《C++并发编程实战》(6) - 基于锁的并发数据结构

数据结构:
    作为程序设计问题中的关键部分,并行程序设计问题也需要处理数据结构,数据结构本身要么不需要同步,要么通过同步机制来保障如互斥体、锁等;

并发设计含义:
    多个线程可同时使用此数据结构且执行相同或不同的操作,满足每个线程针对数据结构有一致性的视图,不会破坏或者丢失数据等竞争条件,则为线程安全的。
    数据结构的操作接口中若抛出了异常,但并没有修改数据结构,则认为是异常安全的。
    加锁的过程可能导致序列化问题,对性能有一定的限制、损失:即多个线程只能轮流线性而不是并发地存取被互斥体等锁保护的数据;在数据结构设计中实现并发需考虑并发的范围,
    设计的基本思想是:更小的保护区域,更少的操作被序列化,以及更高的并发潜能。

并发设计数据结构的准则:
    保证存取数据时安全的:除了需要考虑必要的接口提供锁保护,还需要考虑调用其他接口或者内部函数是否与其他线程同时调用操作可以是安全的,确定不变量。
    允许真正的并发存取操作:考虑锁的范围是否可尽可能小、数据结构的不同部分是否可被不同的互斥体等保护、是否所有操作需要同样级别的保护等。
    
基于锁保护的数据结构:
    确保存取数据时要锁住正确的互斥体且要确保锁住的时间最小化。另外若对数据结构的独立部分用独立的锁来保护可提高并发性,
    但此时若设计不当可能出现多个锁的操作引起死锁,此相对使用一个互斥体锁来操作要复杂精细一些。
    此外设计一个比较好的数据结构结合精细且正确的锁机制、粒度可更大限度的提高并发性。

 

posted @ 2019-10-10 13:24  浩月星空  阅读(306)  评论(0编辑  收藏  举报