【发布时间】:2019-05-01 15:34:45
【问题描述】:
我想把线程函数中的struct变量改成全局变量。
但这不起作用:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 1
typedef struct {
int id;
int reservable;
} Customer;
void *CustomerFunc(void *customer) {
Customer *a;
a = (Customer *)customer;
printf("reservable %d", a->reservable);
a->reservable = 5;
}
int main (int argc, char *argv[]) {
pthread_t abc[NUM_THREADS];
int rc;
long t;
Customer *customer = (Customer*)malloc(sizeof(Customer));
customer->id = 1;
customer->reservable = 2;
rc = pthread_create(&abc[0], NULL, CustomerFunc, (void *)&customer);
printf("reservable MAIN%d", customer->reservable);
pthread_exit(NULL);
}
这段代码结果是:
reservable: 0 reservable MAIN: 2
但我想看看:
reservable: 2 reservable MAIN: 5
【问题讨论】:
-
(void *)&customer是一个指向指针的指针。 -
另外,
CustomerFunc应该返回一个值。 -
另外,您应该等待线程完成后再尝试打印结果。
-
但我不希望这个函数返回值@JohnnyMopp
-
函数原型说它应该返回一个
void *。如果您不想返回任何内容,请更改为void CustomerFunc(void *customer) {。
标签: c multithreading struct