c++ - 为 win32 线程使用不同的静态库内存

标签 c++ c multithreading thread-local-storage

我有一些旧的 C 静态库,其代码类似于:

.h文件

void setValue(int);

.c文件

int value;

void setValue(int i) { value = i; }

从主应用程序(用 C++ 编写)它只是通过调用调用(当然头文件中包含 extern C)

setValue(42);

在单线程中一切正常,当然如果在 2 个不同的线程中使用相同的库,则“值”在它们之间共享。

为每个线程的库使用单独内存的最佳方法是什么?

所以如果有 2 个线程 T1 和 T2,它会像这样工作:

T1.setValue(1); 
T2.setValue(2);
T1.start();
T2.start();

// T1 works with value "1"
// T2 works with value "2"

最佳答案

假设您可以更改并重新编译代码,您可以使用 __thread 标记 value 静态变量。或 thread_local (C++11) 或 __declspec(thread) (MSVC)。然后每个线程都会有一个单独的变量存储。

关于c++ - 为 win32 线程使用不同的静态库内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819460/

相关文章:

c - 为什么读/写锁需要锁?

c - Linux 中多线程的信号处理

java - 超时后Executor Service剩余任务

C#变量新鲜度

c++ - OpenCV绘制轮廓和裁剪

c++ - 使用自定义排序函数对 vector<string> 中的字符串进行排序时出现段错误

c - (初级程序员)需要帮助 : Linked Lists in C

C++ 嵌套模板结构

c++ - 内联函数的前向声明

java - 减少斯坦福 corenlp 的执行时间?