了解 std::shared_ptr 线程安全
文档中提到了控制块的线程安全,其中管理对象的共享所有权。多个线程可以同时访问不同的shared_ptr对象,因为它们共享底层资源的所有权而不会发生冲突。但是,这并不能保证修改共享对象本身的安全性。
Shared_ptr 和对象修改
在您的代码示例中,线程 1 创建了全局的私有副本使用shared_ptr,而线程2修改global本身。下面解释了该行为:
线程安全注意事项
至安全地修改多线程共享的对象,必须使用std::mutex等同步机制。以下示例演示了使用互斥锁进行线程安全配置更新:
// Shared pointer to the configuration object std::shared_ptr<Configuration> global_config = make_shared<Configuration>(); // Mutex to protect the configuration object std::mutex config_mutex; void thread_fcn() { // Lock the mutex before accessing the configuration std::lock_guard<std::mutex> lock(config_mutex); // Update the configuration from global_config // ... // Unlock the mutex after finishing the update }
通过在修改 global_config 之前获取互斥锁,可以防止来自其他线程的任何干扰。这确保了配置始终以一致且线程安全的方式更新。
以上是修改共享对象时 std::shared_ptr 是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!