gpt4 book ai didi

c++ - 静态函数作用域对象的构造是线程安全的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:51 24 4
gpt4 key购买 nike

假设我有一个尝试使用此代码保护全局计数器的函数:

 static MyCriticalSectionWrapper lock;
lock.Enter();
counter = ++m_counter;
lock.Leave();

是否有可能两个线程调用lock 的构造函数?实现此目标的安全方法是什么?

最佳答案

锁对象的创建本身不是线程安全的。根据编译器的不同,如果多个线程(几乎)同时进入函数,您可能会创建多个独立的锁对象。

这个问题的解决方案是使用:

  • 操作系统保证一次性初始化(针对锁对象)
  • Double-checked locking (假设它对您的特定情况是安全的)
  • 锁对象的线程安全单例
  • 对于您的具体示例,您可以使用线程安全的互锁(例如,Windows 的 InterlockedIncrement() 函数)操作来进行增量操作并避免完全锁定

关于c++ - 静态函数作用域对象的构造是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com