用C语言编写一个包含2 个线程的程序,在主线程中创建一个全局变量并初始化为0,在另一个线程对这个全局变量进行递加运算,并在结束时向主线程返回一个结果,由主线程打印输出。
时间: 2024-02-09 10:13:31 浏览: 88
全局变量的存储方式-c语言课件(大学教程)
好的,下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int global_var = 0;
void *thread_func(void *arg)
{
int *result = (int*)malloc(sizeof(int));
global_var++;
*result = global_var;
pthread_exit(result);
}
int main()
{
pthread_t tid;
int *ret_val;
int status;
// 创建另一个线程
status = pthread_create(&tid, NULL, thread_func, NULL);
if (status != 0) {
printf("Error creating thread!\n");
exit(EXIT_FAILURE);
}
// 等待线程结束并获取返回值
status = pthread_join(tid, (void**)&ret_val);
if (status != 0) {
printf("Error joining thread!\n");
exit(EXIT_FAILURE);
}
// 打印结果
printf("The result is: %d\n", *ret_val);
// 释放内存并退出
free(ret_val);
pthread_exit(NULL);
}
```
在这个程序中,我们首先定义了一个全局变量 `global_var` 并初始化为0。然后在主线程中创建了一个新的线程,并调用 `pthread_create()` 函数。这个新线程会调用 `thread_func()` 函数,这个函数会对 `global_var` 变量进行递加运算,并将结果存储在一个动态分配的整型变量中。最后,这个线程会调用 `pthread_exit()` 函数并传递这个结果。
在主线程中,我们使用 `pthread_join()` 函数等待新线程的结束,并获取其返回值。然后我们打印出这个返回值。
值得注意的是,这个程序中的全局变量没有进行加锁保护,因此在实际应用中可能会出现竞态条件。为了保证程序的正确性,应该使用互斥锁或其他同步机制来保护全局变量的访问。
阅读全文