Skip to content

Commit 9a7491a

Browse files
committed
correct typos in multithreading
1 parent e589b4d commit 9a7491a

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

docs/languages/CSharp/CSharp_2_multithread.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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

108108
Linux 进程分为前台进程和后台进程。前台进程占据当前的 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

0 commit comments

Comments
 (0)