C++ 共享指针的线程安全性

主要观点:介绍 C++ 的std::shared_ptr,它能自动释放所指对象,通过原子操作实现引用计数的线程安全,但对象本身的访问非线程安全,需用户确保线程安全并使用互斥锁。
关键信息

  • std::shared_ptr基于引用计数,最后一个指向对象的std::shared_ptr销毁时自动释放对象。
  • 引用计数使用std::atomic实现线程安全,对象访问需用户加互斥锁保证线程安全。
  • 给出简化自定义std::shared_ptr的代码示例,包括构造、复制构造、赋值重载、析构等操作。
  • 讨论对象销毁和释放的线程安全,最后一个引用计数为 1 的std::shared_ptr析构时才会销毁对象,不会出现对象被两次销毁的情况。
    重要细节
  • 代码中通过fetch_addfetch_sub操作原子地增加和减少引用计数。
  • main函数中创建SharedPtr并在多个线程中对其指向的对象进行操作,使用互斥锁保证线程安全。
  • 给出构建和运行程序的命令,使用g++编译代码并运行生成的可执行文件。
    参考文献std::shared_ptr - CPP Reference(https://en.cppreference.com/w...
阅读 23
0 条评论