Linux下用C语言编写一个控制台应用程序,程序中有一个共享的整型变量shared_var,初始值为0;创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程均不断地循环,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1
时间: 2024-02-13 19:01:55 浏览: 77
怎样在linux下编写C程序并编译执行
好的,这是一个经典的线程同步问题,可以使用互斥锁来解决。下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int shared_var = 0; // 共享变量
pthread_mutex_t mutex; // 互斥锁
void *thread_func(void *arg) {
while (1) {
pthread_mutex_lock(&mutex); // 加锁
printf("Thread: shared_var = %d\n", shared_var);
shared_var--;
pthread_mutex_unlock(&mutex); // 解锁
}
}
int main() {
pthread_t tid;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
if (pthread_create(&tid, NULL, thread_func, NULL) != 0) {
perror("pthread_create error");
exit(1);
}
while (1) {
pthread_mutex_lock(&mutex); // 加锁
printf("Main: shared_var = %d\n", shared_var);
shared_var++;
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
在主线程和新线程中都要使用互斥锁来保护共享变量,确保同一时间只有一个线程在访问它。这里使用了pthread库提供的互斥锁和线程函数,需要在编译时加上-lpthread选项。
阅读全文