如何使用pthread修改主进程中的指针?
How to use pthread to modify pointers in main process?
在下面的示例中,我尝试使用pthread 修改主进程中的char 指针。但是,我没有看到指针值发生变化。是什么原因,我该如何实现我的目标?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> //Header file for sleep(). man 3 sleep for details.
#include <pthread.h>
#include <errno.h>
#include <string.h>
char *target = "thread";
void *modify(void *vargp) {
vargp = target;
printf("Thread vargp = %s\n", (char*)vargp);
return NULL;
}
int main() {
char *pt = "main";
pthread_t thread_id;
printf("Before Thread, pt = %s\n", pt);
pthread_create(&thread_id, NULL, modify, pt);
pthread_join(thread_id, NULL);
printf("After Thread, pt = %s\n", pt);
exit(0);
}
$ ./pthread_simple
Before Thread, pt = main
Thread vargp = thread
After Thread, pt = main
我要实现的是:
$ ./pthread_simple
Before Thread, pt = main
Thread vargp = thread
After Thread, pt = thread
函数参数是所传递内容的副本,对它们的更改是函数局部的。要让函数修改内容,您必须将 指针传递给 应该修改的内容。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> //Header file for sleep(). man 3 sleep for details.
#include <pthread.h>
#include <errno.h>
#include <string.h>
char *target = "thread";
void *modify(void *vargp) {
*(char**)vargp = target; /* add cast and dereference to modify what is pointed */
printf("Thread vargp = %s\n", *(char**)vargp); /* add cast and dereference */
return NULL;
}
int main() {
char *pt = "main";
pthread_t thread_id;
printf("Before Thread, pt = %s\n", pt);
pthread_create(&thread_id, NULL, modify, &pt); /* pass pointer to pt */
pthread_join(thread_id, NULL);
printf("After Thread, pt = %s\n", pt);
exit(0);
}
在下面的示例中,我尝试使用pthread 修改主进程中的char 指针。但是,我没有看到指针值发生变化。是什么原因,我该如何实现我的目标?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> //Header file for sleep(). man 3 sleep for details.
#include <pthread.h>
#include <errno.h>
#include <string.h>
char *target = "thread";
void *modify(void *vargp) {
vargp = target;
printf("Thread vargp = %s\n", (char*)vargp);
return NULL;
}
int main() {
char *pt = "main";
pthread_t thread_id;
printf("Before Thread, pt = %s\n", pt);
pthread_create(&thread_id, NULL, modify, pt);
pthread_join(thread_id, NULL);
printf("After Thread, pt = %s\n", pt);
exit(0);
}
$ ./pthread_simple
Before Thread, pt = main
Thread vargp = thread
After Thread, pt = main
我要实现的是:
$ ./pthread_simple
Before Thread, pt = main
Thread vargp = thread
After Thread, pt = thread
函数参数是所传递内容的副本,对它们的更改是函数局部的。要让函数修改内容,您必须将 指针传递给 应该修改的内容。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> //Header file for sleep(). man 3 sleep for details.
#include <pthread.h>
#include <errno.h>
#include <string.h>
char *target = "thread";
void *modify(void *vargp) {
*(char**)vargp = target; /* add cast and dereference to modify what is pointed */
printf("Thread vargp = %s\n", *(char**)vargp); /* add cast and dereference */
return NULL;
}
int main() {
char *pt = "main";
pthread_t thread_id;
printf("Before Thread, pt = %s\n", pt);
pthread_create(&thread_id, NULL, modify, &pt); /* pass pointer to pt */
pthread_join(thread_id, NULL);
printf("After Thread, pt = %s\n", pt);
exit(0);
}