Skip to content

Commit

Permalink
correct typos in multithreading
Browse files Browse the repository at this point in the history
  • Loading branch information
Timothy-Liuxf committed Jan 28, 2023
1 parent e589b4d commit 9a7491a
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions docs/languages/CSharp/CSharp_2_multithread.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ title: 多线程与异步

##### Linux

UNIX/Linux 下为每个进程赋予一个唯一的进城标识符 PID(Process ID),使用 `ps``htop` 可以查看进程的 PID,并可以通过 `kill` 命令根据 PID 杀死一个进程。
UNIX/Linux 下为每个进程赋予一个唯一的进程标识符 PID(Process ID),使用 `ps``htop` 可以查看进程的 PID,并可以通过 `kill` 命令根据 PID 杀死一个进程。

Linux 进程分为前台进程和后台进程。前台进程占据当前的 shell,而后台进程不会占据当前的 Shell,创建后台进程需要在后面加上 `&`。使用 `jobs` 可以查看当前的所有后台进程,而使用 `fg` 可以讲后台进程转到前台。

Expand Down Expand Up @@ -607,10 +607,10 @@ void consumer(void)
使用条件变量需要注意的有:

- 条件变量也存在信号丢失的现象,即如果当前并没有休眠的进程,但是却进行了一次唤醒,那么这个唤醒的信号便丢失了。
- 条件变量存在虚唤醒的问题,因此通常需要循环 `while` 判断检查继续执行满足的条件,而不是简单的 `if` 判断,以避免虚唤醒
- 条件变量存在**虚假唤醒([spurious wakeup](https://en.wikipedia.org/wiki/Spurious_wakeup)**的问题,因此通常需要循环 `while` 判断检查继续执行满足的条件,而不是简单的 `if` 判断,以避免虚假唤醒
- 条件变量对一个互斥量进行的上述三个操作都应当在该互斥量被加锁的前提下。

有趣的是,C++17 及以前,并没有提供信号量的标准库,指提供了互斥量和条件变量的标准库,直到 C++20 才加入了信号量(`std::counting_semaphore`)。这是因为利用互斥量与条件变量,再加上一个整数变量用于计数,我们可以很轻松实现一个信号量。具体如何实现留给读者思考。
有趣的是,C++17 及以前,并没有提供信号量的标准库,只提供了互斥量和条件变量的标准库,直到 C++20 才加入了信号量(`std::counting_semaphore`)。这是因为利用互斥量与条件变量,再加上一个整数变量用于计数,我们可以很轻松实现一个信号量。具体如何实现留给读者思考。

下面用条件变量来解决生产者消费者问题。为了简单起见且便于理解,我们现在只考虑一个容量为 1 的仓库。

Expand Down

0 comments on commit 9a7491a

Please sign in to comment.