Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit eb7760c

Browse files
committed
修改格式
1 parent b29ca64 commit eb7760c

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

‎md/03共享数据.md‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -777,26 +777,26 @@ public:
777777
778778
std::recursive_mutex mtx;
779779
780-
void recursiveFunction(int count) {
780+
void recursive_function(int count) {
781781
// 递归函数,每次递归都会锁定互斥量
782782
mtx.lock();
783783
std::cout << "Locked by thread: " << std::this_thread::get_id() << ", count: " << count << std::endl;
784784
if (count > 0) {
785-
recursiveFunction(count - 1); // 递归调用
785+
recursive_function(count - 1); // 递归调用
786786
}
787787
mtx.unlock(); // 解锁互斥量
788788
}
789789
790790
int main() {
791-
std::thread t1(recursiveFunction, 3);
792-
std::thread t2(recursiveFunction, 2);
791+
std::thread t1(recursive_function, 3);
792+
std::thread t2(recursive_function, 2);
793793
794794
t1.join();
795795
t2.join();
796796
}
797797
```
798798
799-
> [运行](https://godbolt.org/z/58z41MrxP)测试。
799+
> [运行](https://godbolt.org/z/aefrYbGd7)测试。
800800
801801
- [**`lock`**](https://zh.cppreference.com/w/cpp/thread/recursive_mutex/lock):线程可以在递归互斥体上重复调用 `lock`。在线程调用 `unlock` 匹配次数后,所有权才会得到**释放**。
802802
@@ -807,16 +807,16 @@ int main() {
807807
同样的,我们也可以使用 `std::lock_guard`、`std::unique_lock` 帮我们管理 `std::recursive_mutex`,而非显式调用 `lock` 与 `unlock`:
808808
809809
```cpp
810-
void recursiveFunction(int count) {
810+
void recursive_function(int count) {
811811
std::lock_guard<std::recursive_mutex>lc{ mtx };
812812
std::cout << "Locked by thread: " << std::this_thread::get_id() << ", count: " << count << std::endl;
813813
if (count > 0) {
814-
recursiveFunction(count - 1);
814+
recursive_function(count - 1);
815815
}
816816
}
817817
```
818818
819-
> [运行](https://godbolt.org/z/6YTxzM8fj)测试。
819+
> [运行](https://godbolt.org/z/rqG613W94)测试。
820820
821821
## `new``delete` 是线程安全的吗?
822822

‎md/04同步操作.md‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,9 @@ public:
152152
}
153153
// 从队列中弹出元素(阻塞直到队列不为空)
154154
void pop(T& value) {
155-
std::unique_lock<std::mutex>lk(m);
156-
data_cond.wait(lk, [this] {return !data_queue.empty(); });
157-
value = data_queue.front();
155+
std::unique_lock<std::mutex>lk(m);
156+
data_cond.wait(lk, [this] {return !data_queue.empty(); });
157+
value = data_queue.front();
158158
data_queue.pop();
159159
}
160160
// 从队列中弹出元素(阻塞直到队列不为空),并返回一个指向弹出元素的 shared_ptr
@@ -668,3 +668,7 @@ int main() {
668668
值:100
669669
来自 set_exception 的异常: promise already satisfied
670670
```
671+
672+
### 多个线程的等待
673+
674+
之前的例子中都在用 `std::future` ,不过 `std::future` 也有局限性。很多线程在等待的时候,只有一个线程能获取结果。当多个线程等待相同事件的结果时,就需要使用 `std::shared_future` 来替代 `std::future` 了。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /