1.1.1 线程安全的定义
依据[JCP],一个线程安全的class 应当满足以下三个条件:
多个线程同时访问时,其表现出正确的行为。
无论操作系统如何调度这些线程, 无论这些线程的执行顺序如何交织(interleaving)。
调用端代码无须额外的同步或其他协调动作。
依据这个定义,C++ 标准库里的大多数class 都不是线程安全的,包括std::string、std::vector、std::map 等,因为这些class 通常需要在外部加锁才能供多个线程同时访问。
时间: 2024-10-20 00:43:01