九月
今天是星期天,是九月的第一天,亦是秋天的第一天。
秋天的到来,总是伴随着一种特殊的情感,那种既温柔又略带忧伤的感觉,在每一个秋日的清晨和黄昏里悄然蔓延。秋天是一个让人沉思的季节,树叶渐渐变黄,微风轻拂,带来丝丝凉意,仿佛在提醒我们时间的流逝和生命的无常。
今天是星期天,是九月的第一天,亦是秋天的第一天。
秋天的到来,总是伴随着一种特殊的情感,那种既温柔又略带忧伤的感觉,在每一个秋日的清晨和黄昏里悄然蔓延。秋天是一个让人沉思的季节,树叶渐渐变黄,微风轻拂,带来丝丝凉意,仿佛在提醒我们时间的流逝和生命的无常。
从前两篇文章可知条件变量必须和锁配合使用,那为什么不直接封装在一起呢?于是就有个信号量。
信号量只是将锁和单值条件的条件变量封装在一起,所以它不是一个全新的概念,它能实现的事锁加条件变量都能实现。对于比较复杂情况下的条件判断无法使用信号量解决,因为其只内置了一个简单的整型的 value 条件。
通过锁可以使数据结构线程安全(thread safe),但具体如何加锁则决定了该数据结构的效率。本章将探讨怎么给数据结构加锁,才能让该结构功能正确的同时保证高性能。
并发编程要解决的最基本的问题:我们希望以原子方式执行一系列的指令,但由于中断的存在我们做不到这点。因此本章介绍了锁(lock)来解决这一问题。程序员在代码中加锁,放在临界区周围,保证临界区能够像单条原子指令一样执行。
本章主要是对 pthread 库进行粗略的介绍,更多 API 的细节可以查看文档和参考其他书籍。随后的章节会慢慢介绍锁和条件变量的概念,因此本章节可以作为参考。
本章解答的关键问题:如何创建和控制线程?
操作系统应该提供那些创建和控制线程的接口?这些接口如何设计得好用又实用?
这一章的内容比较偏向实践,主要介绍了 UNIX 系统中的进程相关的 API,即一些列系统的调用,比如进程创建相关的fork()
和 exec()
,进程间等待用的 wait()