gpt4 book ai didi

从 pthread 内部调用函数?

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:28 26 4
gpt4 key购买 nike

如果我有一个线程函数,并且从它内部调用另一个函数(位于单独的 .c 文件中),线程函数的每个实例是否都获得它自己版本的被调用函数?示例:

文件1

void* threaded_func(void* data) {
function2(...);
}

文件2

int a;

int function2(...) {
int b;
}

在我的示例中,所有线程的 int a 都是相同的 int a 吗?对于我在函数 2 中定义的变量(即 int b)呢?

一些上下文:

我正在创建一个简单的 HTTP 服务器,我的 function2 是一个 serve_client 函数,它应该只在连接关闭时返回。我有一个问题,我认为是由于 file2 (int a) 中的某些变量被每个新线程覆盖。我认为我的问题是我希望 C 源文件的行为类似于 Java 中的类。

最佳答案

does each instance of the threaded function get it's own version of the called function?

笼统地说,这是正确的,前提是该函数不使用任何全局变量(例如,int a; 在您的示例中)或任何具有静态存储持续时间的变量。如果 a 被多个线程“共享”,那很可能是问题的根源。

如果a需要在线程间共享,那么你需要同步它的访问。如果您的 a 需要对每个线程都是唯一的,则需要线程本地存储。例如,使用 C11 的 __Thread_local 或 gcc 的 __thread .

关于从 pthread 内部调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com