我的代码中有几个地方创建了一个函数静态对象,然后在调用该函数的任何时候使用(复制)。可以从任何线程调用这些函数之一。该函数不访问除此静态对象之外的任何共享状态。
当线程 1 第一次调用该函数时,对象被创建并初始化。但是,(幸运的是)我有一个可重复的情况,即程序切换到线程 2 并在初始化完成之前调用相同的函数。该对象被分配并使用了错误数据!
我不知道如何处理这个。我在初始化代码中使用了关键部分,但这甚至不是问题。这个对象在被初始化之前就被使用了。
我尝试使用 __declspec(thread) 使这个线程成为本地线程,但这显然不适用于对象。
我可以用一个关键部分来包围整个事情,这也许是最好的解决方案,但我担心代码的其他部分会出现这样的问题——如果有一个通用的解决方案会很好。