From f12fa7259829402d20626b555b8cb9f6a7137028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mq=E7=99=BD?= <3326284481@qq.com> Date: Sat, 1 Jun 2024 11:57:04 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=20=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E7=AB=A0=20`std::jthread`=20=E4=B8=80=E8=8A=82=E4=B8=AD?= =?UTF-8?q?=E6=9C=89=E5=85=B3=E7=BA=BF=E7=A8=8B=E5=81=9C=E6=AD=A2=E5=92=8C?= =?UTF-8?q?=20`pthread=5Fcancel`=20=E7=9A=84=E5=AF=B9=E6=AF=94=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=202.=20=E4=BF=AE=E6=94=B9=E7=AC=AC=E5=9B=9B=E7=AB=A0?= =?UTF-8?q?=E2=80=9CC++20=E4=BF=A1=E5=8F=B7=E9=87=8F=E2=80=9D=E4=B8=80?= =?UTF-8?q?=E8=8A=82=E4=B8=AD=E5=86=85=E5=AE=B9=EF=BC=8C=E5=BC=BA=E8=B0=83?= =?UTF-8?q?=20`acquire`=E3=80=81`release`=20=E6=98=AF=E5=8E=9F=E5=AD=90?= =?UTF-8?q?=E7=9A=84=E5=87=8F=E5=B0=91=E4=B8=8E=E5=A2=9E=E5=8A=A0=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=20#12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "md/02\344\275\277\347\224\250\347\272\277\347\250\213.md" | 2 +- "md/04\345\220\214\346\255\245\346\223\215\344\275\234.md" | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git "a/md/02\344\275\277\347\224\250\347\272\277\347\250\213.md" "b/md/02\344\275\277\347\224\250\347\272\277\347\250\213.md" index 8262cf6b..c92a1d87 100644 --- "a/md/02\344\275\277\347\224\250\347\272\277\347\250\213.md" +++ "b/md/02\344\275\277\347\224\250\347\272\277\347\250\213.md" @@ -899,7 +899,7 @@ stop_source _Ssource; 首先要明确,C++ 的 `std::jthread` 提供的线程停止功能并不同于常见的 POSIX 函数 [`pthread_cancel`](https://pubs.opengroup.org/onlinepubs/9699919799/)。`pthread_cancel` 是一种发送取消请求的函数,但并不是强制性的线程终止方式。目标线程的可取消性状态和类型决定了取消何时生效。当取消被执行时,进行清理和终止线程[^2]。 -`std::jthread` 所谓的线程停止只是一种基于用户代码的控制机制,而不是一种强制性的线程终止。使用 `std::stop_source` 和 [`std::stop_token`](https://zh.cppreference.com/w/cpp/thread/stop_token) 提供了一种优雅地请求线程停止的方式,**但实际上停止的决定和实现都由用户代码来完成**。 +`std::jthread` 所谓的线程停止只是一种**基于用户代码的控制机制**,而不是一种与操作系统系统有关系的线程终止。使用 `std::stop_source` 和 [`std::stop_token`](https://zh.cppreference.com/w/cpp/thread/stop_token) 提供了一种优雅地请求线程停止的方式,**但实际上停止的决定和实现都由用户代码来完成**。 ```cpp using namespace std::literals::chrono_literals; diff --git "a/md/04\345\220\214\346\255\245\346\223\215\344\275\234.md" "b/md/04\345\220\214\346\255\245\346\223\215\344\275\234.md" index 7a52f849..d8f80b64 100644 --- "a/md/04\345\220\214\346\255\245\346\223\215\344\275\234.md" +++ "b/md/04\345\220\214\346\255\245\346\223\215\344\275\234.md" @@ -1171,7 +1171,7 @@ int main() { [主] 获得信号 ``` -[`acquire`](https://zh.cppreference.com/w/cpp/thread/counting_semaphore/acquire) 函数就是我们先前说的“*等待*”(减少计数),`release` 函数就是"释放"(增加计数)。 +[`acquire`](https://zh.cppreference.com/w/cpp/thread/counting_semaphore/acquire) 函数就是我们先前说的“*等待*”(**原子**地减少计数),[`release`](https://zh.cppreference.com/w/cpp/thread/counting_semaphore/release) 函数就是"释放"(**原子**地增加计数)。 ---