我的应用程序保留一个全局共享指针,多个线程在被另一个线程更改时从该共享指针获取副本?
这样安全吗?那么这样做的正确方法是什么?
代码:
#include <iostream>
#include <memory>
#include <thread>
class Configuration
{
public:
Configuration(uint64_t value) { m_value = value; }
virtual ~Configuration() {}
uint64_t getValue() const { return m_value; }
private:
uint64_t m_value;
};
std::shared_ptr<Configuration> g_configuration = nullptr;
void outputProcessing()
{
uint64_t sum = 0;
while (true)
{
auto configuration = g_configuration;
sum += configuration->getValue();
}
}
void inputProcessing()
{
uint64_t value = 1;
while (true)
{
auto configuration = std::make_shared<Configuration>(value++);
g_configuration = configuration;
}
}
int main(const int argc, const char** argv)
{
g_configuration = std::make_shared<Configuration>(0);
std::thread inputThread(inputProcessing);
std::thread outputThread1(outputProcessing);
std::thread outputThread2(outputProcessing);
std::thread outputThread3(outputProcessing);
inputThread.join();
outputThread1.join();
outputThread2.join();
outputThread3.join();
return EXIT_SUCCESS;
}
在这个应用程序中,一个线程创建新的共享指针并分配给其他线程正在复制的全局指针。
如果这不是线程安全的,那么选项是什么?
请忘记输出线程中实现的实际功能。