c thread 参数 引用传递
时间: 2023-07-29 16:14:36 浏览: 41
在 C 语言中,线程函数的参数可以通过引用传递。这意味着,当你创建一个新的线程时,你可以将一个指向某个变量的指针作为参数传递给线程函数,这个变量可以在主线程和新线程之间共享。如果线程函数需要修改这个变量的值,它可以通过指针来进行操作。
下面是一个例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_func(void *arg) {
int *p = (int *)arg;
printf("Thread: %d\n", *p);
(*p)++;
pthread_exit(NULL);
}
int main() {
int value = 10;
pthread_t tid;
pthread_create(&tid, NULL, thread_func, &value);
printf("Main: %d\n", value);
pthread_join(tid, NULL);
printf("Main: %d\n", value);
return 0;
}
```
在这个例子中,我们创建了一个新线程,并将变量 `value` 的地址作为参数传递给了线程函数 `thread_func`。线程函数打印出了 `value` 的值,并将其加1。在主线程中,我们也打印出了 `value` 的值,然后等待新线程结束后再次打印出 `value` 的值。
运行这个程序,你会看到如下输出:
```
Main: 10
Thread: 10
Main: 11
```
可以看到,线程函数对 `value` 的修改在主线程中也能够看到。这是因为我们将 `value` 的地址传递给了线程函数,并在线程函数中通过指针来访问它。这样,主线程和新线程就可以共享这个变量了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)