我的代码不能用... 但另一个和我的代码相似的例子却能用。我该如何解决?
好像是 pthread_join()
像我的代码一样在内部改变整数值。但我的不工作。
谁能帮我解决?
#include <stdio.h>
void test(void **temp) {
int foo = 3;
*temp = foo;
}
int main(void) {
int temp;
test((void **)&temp);
printf("%d\n", temp);
return 0;
}
pthread_join
举个例子。
#include <pthread.h>
#include <stdlib.h>
void *test(void *data) {
int i;
int a = *(int *)data;
for (i = 0; i < 10; i++) {
printf("%d\n", i * a);
}
}
int main() {
int a = 100;
pthread_t thread_t;
int status;
if (pthread_create(&thread_t, NULL, test, (void *)&a) < 0) {
perror("thread create error:");
exit(0);
}
pthread_join(thread_t, (void **)&status);
printf("Thread End %d\n", status);
return 1;
}
但我的不工作...
这句话:
pthread_join(thread_t, (void **)&status);
赋予状态 返回 你的线程函数的值。但你的函数并没有返回 任何所以你得到的是垃圾。
为了解决这个问题,让你的 test
函数返回一些东西。
P.S. 请开启编译器警告(-Wall
, -Wextra
)--编译器应该已经警告过你这个错误了。
P.P.S 请不要这样命名你的变量。thread_t
-- the _t
代表 类型和 thead_t
是 不 一个类型。
你试图把temp变成两个void指针(void**),而实际上你只有一个指向int temp的指针。只要返回指针值,你就可以在类似的pthread例子中使用这个方法。
#include <stdio.h>
#include <stdlib.h>
void *test(void *temp) {
int *ptr = (int*)malloc(sizeof(int));
*ptr = 3;
return ptr;
}
int main(int argc, char *argv[]) {
int *temp = (int*)test(nullptr);
printf("%d\n", *temp);
free(temp);
return 0;
}