多线程.我是否需要关键部分才能进行只读访问?

Man*_*d3r 5 c++ multithreading shared-memory critical-section

我有一堆线程.他们应该访问包含配置数据的单例,该数据在创建单例时初始化一次.因此在第一次访问.因此,对单身人士的进一步行动只是只读的.在这种情况下,我是否需要关键部分?

das*_*ght 6

看来,因为数据是在第一次访问时懒惰地创建的,所以对单例的指针或引用是读写的。这意味着您确实需要一个临界区。

事实上,在这种情况下,在保持惰性初始化的同时避免临界区的愿望是如此普遍,以至于导致了双重检查锁定反模式的产生

另一方面,如果您在读取之前急切地初始化您的单例,您将能够避免通过常量指针/引用访问不可变对象的临界区。