在 pthread 中通过引用传递值
Pass value by reference in pthread
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
void* func(void*);
int main()
{
int numb = 0;
pthread_t pid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&pid, &attr, func, (void*)&numb);
printf("%s%d\n", "Number: ", numb);
return 0;
}
//..............defintation...............
void* func(void* data)
{
int* numb = (int*)data;
*numb = 1000;
}
我想通过引用将数字传递给函数 "func"。我通过传递数字“(void*)&numb”的地址来做到这一点。我在函数中将值更改为 1000,并在 main 中打印该值,但输出是 0 而不是 1000。
谢谢!!!
这是一个典型的竞争条件。
您的计算机在到达 func
中的 *numb = 1000
之前到达了 main 中的 printf
。
您将需要一个条件变量或某种其他形式的并发原语以同步对此数据的访问。
这些是多线程编程的基础知识,因此您应该阅读有关该主题的书籍而不是猜测。
#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
void* func(void*);
int main()
{
int numb = 0;
pthread_t pid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&pid, &attr, func, (void*)&numb);
printf("%s%d\n", "Number: ", numb);
return 0;
}
//..............defintation...............
void* func(void* data)
{
int* numb = (int*)data;
*numb = 1000;
}
我想通过引用将数字传递给函数 "func"。我通过传递数字“(void*)&numb”的地址来做到这一点。我在函数中将值更改为 1000,并在 main 中打印该值,但输出是 0 而不是 1000。
谢谢!!!
这是一个典型的竞争条件。
您的计算机在到达 func
中的 *numb = 1000
之前到达了 main 中的 printf
。
您将需要一个条件变量或某种其他形式的并发原语以同步对此数据的访问。
这些是多线程编程的基础知识,因此您应该阅读有关该主题的书籍而不是猜测。