File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change @@ -103,7 +103,7 @@ title: 多线程与异步
103103
104104##### Linux
105105
106- UNIX/Linux 下为每个进程赋予一个唯一的进城标识符 PID(Process ID),使用 ` ps ` 或 ` htop ` 可以查看进程的 PID,并可以通过 ` kill ` 命令根据 PID 杀死一个进程。
106+ UNIX/Linux 下为每个进程赋予一个唯一的进程标识符 PID(Process ID),使用 ` ps ` 或 ` htop ` 可以查看进程的 PID,并可以通过 ` kill ` 命令根据 PID 杀死一个进程。
107107
108108Linux 进程分为前台进程和后台进程。前台进程占据当前的 shell,而后台进程不会占据当前的 Shell,创建后台进程需要在后面加上 ` & ` 。使用 ` jobs ` 可以查看当前的所有后台进程,而使用 ` fg ` 可以讲后台进程转到前台。
109109
@@ -607,10 +607,10 @@ void consumer(void)
607607使用条件变量需要注意的有:
608608
609609- 条件变量也存在信号丢失的现象,即如果当前并没有休眠的进程,但是却进行了一次唤醒,那么这个唤醒的信号便丢失了。
610- - 条件变量存在虚唤醒的问题 ,因此通常需要循环 ` while ` 判断检查继续执行满足的条件,而不是简单的 ` if ` 判断,以避免虚唤醒 。
610+ - 条件变量存在 ** 虚假唤醒( [ spurious wakeup ] ( https://en.wikipedia.org/wiki/Spurious_wakeup ) ) ** 的问题 ,因此通常需要循环 ` while ` 判断检查继续执行满足的条件,而不是简单的 ` if ` 判断,以避免虚假唤醒 。
611611- 条件变量对一个互斥量进行的上述三个操作都应当在该互斥量被加锁的前提下。
612612
613- 有趣的是,C++17 及以前,并没有提供信号量的标准库,指提供了互斥量和条件变量的标准库 ,直到 C++20 才加入了信号量(` std::counting_semaphore ` )。这是因为利用互斥量与条件变量,再加上一个整数变量用于计数,我们可以很轻松实现一个信号量。具体如何实现留给读者思考。
613+ 有趣的是,C++17 及以前,并没有提供信号量的标准库,只提供了互斥量和条件变量的标准库 ,直到 C++20 才加入了信号量(` std::counting_semaphore ` )。这是因为利用互斥量与条件变量,再加上一个整数变量用于计数,我们可以很轻松实现一个信号量。具体如何实现留给读者思考。
614614
615615下面用条件变量来解决生产者消费者问题。为了简单起见且便于理解,我们现在只考虑一个容量为 1 的仓库。
616616
You can’t perform that action at this time.
0 commit comments