在 C++ 中,线程安全的函数是指在多线程环境下可以安全调用,不会导致数据竞争或其他并发问题的函数。C++ 标准库提供了许多线程安全的函数,同时也要求开发者在使用自定义函数时确保线程安全。以下是一些常见的线程安全函数和实现线程安全的方法:
1. 标准库中的线程安全函数
C++ 标准库中的许多函数是线程安全的,尤其是那些不涉及共享状态的函数。
1.1 <iostream>
中的线程安全函数
std::cout
和std::cerr
:- 这些对象是线程安全的,但输出可能会交错。
- 如果需要保证输出顺序,可以使用互斥锁保护。
1.2 <atomic>
中的线程安全函数
std::atomic<T>
:- 所有操作(如
load()
、store()
、fetch_add()
等)都是原子的。 - 示例:
std::atomic<int> counter(0); counter++; // 线程安全
- 所有操作(如
1.3 <thread>
中的线程安全函数
std::thread::join()
:- 等待线程完成,线程安全的。