我有一个方法需要大量内存(与堆栈大小相比)来存储临时结果。 我正在考虑使用静态变量作为本地临时存储。
我做了一些研究,发现静态变量的初始化在 C++98 中不是线程安全的。
那么,问题是,如果我只需要空间而不关心初始化怎么办?
或者更进一步,使用静态变量作为本地存储有什么问题?
最佳答案
这不仅仅是初始化的问题。静态变量,即使是在函数中定义的变量,也是一个实例,所有对该函数的调用都共享它——甚至是不同线程中的调用。如果您使用静态变量作为暂存缓冲区,您的所有线程将共享相同 暂存缓冲区,您将需要使用显式同步来防止它们相互干扰。您还需要弄清楚如何让线程有效地共享缓冲区;如果他们都试图同时使用相同的部分并且经常不得不等待互斥锁,那么您将失去并发的好处,还不如只使用一个线程。
让函数在堆上分配它的暂存区并在返回之前删除它会容易得多。 (您可以在 C++11 中使用 std::unique_ptr
来确保在指针超出范围时删除缓冲区,或者如果您使用 std::auto_ptr
重新使用 C++98。)
关于c++ - 静态变量与堆栈变量 : thread safety vs stack size?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708155/