gpt4 book ai didi

c - pthread 的函数中声明的变量是否在线程之间共享?

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

我是 C 语言和 pthreads 的新手。这是一个示例(可能不会像我现在写的那样编译)但它显示了我想知道的内容:

int i = 50;

void* myFunc (void* whatever) {
int myLoop = 0;
for (;;)
{
for (myLoop = 0; myLoop < i; myLoop++)
do work blah;
}
pthread_exit(NULL);
}

int main (void) {
pthread_t threadNo1, threadNo2, threadNo3;

pthread_create(&threadNo1, NULL, myFunc, NULL);
pthread_create(&threadNo2, NULL, myFunc, NULL);
pthread_create(&threadNo3, NULL, myFunc, NULL);

pthread_join(threadNo1, NULL);
pthread_join(threadNo2, NULL);
pthread_join(threadNo3, NULL);

pthread_exit(NULL);
}

int myLoop 是否在 3 个线程之间共享?

myFunc 中的循环是否在所有 3 个线程上都像预期的那样运行(如正确迭代到 50,这是 int i 的值),或者它们是否在不断地战斗由于 myLoop++ 而超过它的值(value)?这是因为变量 int myLoop 在所有不同的线程中共享它的内存值吗?

我希望 myFunc 在分配给不同内核的不同线程上运行,而不会在循环时相互混淆,这意味着循环在所有线程上完美迭代并且它们彼此不知道。或者这实际上不是问题并且确实在这样做?

最佳答案

Is int myLoop shared between the 3 threads?

线程与它无关。关于单个线程可以问同样的问题。考虑:

int myFunc(int *j)
{
int q;
// lots of code here
myFunc (&q);
}

考虑一个调用 myFunc 的线程,然后 myFunc 调用自身。 myFunc 的两个实例是否共享 q?答案是——两者都有。每个调用都有自己的 q。但是如果第二次调用 *j = 2; 它将改变第一次调用的 q 的值。

所以每个人都有自己的,但如果他们愿意,他们可以共享它们,因为他们对进程内存有相同的看法。

与线程相同。

关于c - pthread 的函数中声明的变量是否在线程之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47689169/

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