用C语言展示多线程编程:全局变量初始值为0.5个线程每个分别+1,5个线程每 个分别-1,输出结果
时间: 2024-06-11 13:03:58 浏览: 91
以下是使用C语言展示多线程编程的示例代码:
```c
#include <stdio.h>
#include <pthread.h>
double global_var = 0.5;
void *thread_func(void *arg) {
int *num_ptr = (int *) arg;
int num_threads = *num_ptr;
if (num_threads == 1) {
global_var = 1.0;
} else if (num_threads == 5) {
global_var = -1.0;
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[5];
int thread_args[5] = {1, 5, 5, 5, 5};
for (int i = 0; i < 5; i++) {
pthread_create(&threads[i], NULL, thread_func, (void *) &thread_args[i]);
}
for (int i = 0; i < 5; i++) {
pthread_join(threads[i], NULL);
}
printf("Global variable: %f\n", global_var);
return 0;
}
```
在这个示例代码中,我们定义了一个全局变量 `global_var`,其初始值为0.5。我们创建了5个线程,其中一个线程将 `global_var` 的值设置为1.0,另外四个线程将其值设置为-1.0。我们使用 `pthread_create` 函数创建线程,并将线程函数 `thread_func` 作为参数传递给它。在 `thread_func` 函数中,我们检查传递给它的参数 `num_threads` 的值,以确定当前线程应该将 `global_var` 设置为何值。最后,我们使用 `pthread_join` 函数等待所有线程完成执行,然后输出 `global_var` 的值。
请注意,因为多个线程同时访问同一个变量,因此在访问变量时必须使用互斥量或其他同步机制,以避免发生竞态条件。在本示例代码中,我们没有使用互斥量,因为该变量只被写入一次,并且所有线程在写入之前都在等待其他线程完成。
阅读全文