Skip to Main Content
C++程序设计语言(第4部分:标准库)(原书第4版)
book

C++程序设计语言(第4部分:标准库)(原书第4版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced content levelIntermediate to advanced
450 pages
6h 57m
Chinese
Pearson
Content preview from C++程序设计语言(第4部分:标准库)(原书第4版)

42.3 避免数据竞争

避免数据竞争的最好方法是不共享数据。将感兴趣的数据保存在局部变量中,保存在不与其他线程共享的自由存储中,或是保持在thread_local内存中(见42.2.8节)。不要将这类数据的指针传递给其他thread。当另一个thread需要处理这类数据时(如并行排序),传递数据特定片段的指针并确保在任务结束之前不触碰此数据片段。

这些简单规则背后的思想是避免并发数据访问,因此程序不需要锁机制且能达到最高效率。在不能应用这些规则的场合,例如有大量数据需要共享的场合,可使用某种形式的锁机制:

·互斥量(mutex):互斥量(互斥变量,mutual exclusion variable)就是一个用来表示某个资源互斥访问权限的对象。为访问资源,先获取互斥量,然后访问数据,最后释放互斥量(见5.3.4节和42.3.1节)。

·条件变量(condition variable):一个thread用条件变量等待另一个thread或计时器生成的事件(见5.3.4.1节和42.3.4节)。

严格来说,条件变量不能防止数据竞争,而是帮我们避免引入可能引起数据竞争的共享数据。

42.3.1 互斥量

mutex对象用来表示资源的互斥访问。因此,它可用来防止数据竞争以及同步多个thread对共享数据的访问。

“普通”mutex是最简单、最小也最快的互斥量。递归和限时互斥量增加了功能,但也带来了少量额外开销,这一开销对特定机器上的特定应用可能很严重,但也可能并不重要:

在任何时刻,一个互斥量只能被一个thread所拥有: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Java并发编程实战

Java并发编程实战

Brian Goetz, Tim Peierls
C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉
可编程网络自动化

可编程网络自动化

Jason Edelman, Scott S. Lowe, Matt Oswalt

Publisher Resources

ISBN: 9787111544395