用C语言编写一个多线程程序:要求主线程创建3个子线程, 3个子线程在执行时都修改一个它们的共享变量,观察共享变量的值
时间: 2024-02-10 20:10:38 浏览: 142
C语言多线程
3星 · 编辑精心推荐
好的,以下是用C语言编写的一个多线程程序,要求主线程创建3个子线程,3个子线程在执行时都修改一个它们的共享变量,观察共享变量的值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THREAD_COUNT 3
int shared_variable = 0;
pthread_mutex_t mutex;
void *thread_function(void *arg)
{
int i;
int *thread_id = (int *)arg;
for (i = 0; i < 5; i++) {
pthread_mutex_lock(&mutex);
shared_variable++;
printf("Thread %d: The value of the shared variable is %d\n", *thread_id, shared_variable);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main()
{
int i;
int thread_ids[THREAD_COUNT];
pthread_t threads[THREAD_COUNT];
pthread_mutex_init(&mutex, NULL);
for (i = 0; i < THREAD_COUNT; i++) {
thread_ids[i] = i + 1;
pthread_create(&threads[i], NULL, thread_function, &thread_ids[i]);
}
for (i = 0; i < THREAD_COUNT; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex);
return 0;
}
```
在这个程序中,我们创建了一个共享变量 `shared_variable` 和一个互斥锁 `mutex`。主线程创建了3个子线程,并将它们的线程 ID 存储在数组 `thread_ids` 中。每个子线程都会执行 `thread_function` 函数,该函数会对共享变量进行5次加1操作,并输出共享变量的值。在每次修改共享变量时,子线程会对互斥锁进行加锁和解锁操作,以保证线程安全。
当我们运行这个程序时,可以观察到每个子线程都会对共享变量进行加1操作,并输出共享变量的值。由于多个线程同时修改共享变量,因此输出的值可能会比预期的值小,这是因为多个线程之间的竞争可能导致某些修改被覆盖。但无论如何,这个程序演示了如何使用多线程来修改共享变量。
阅读全文