2.Linux下用C语言编写一个控制台应用程序,程序中有一个共享的整型变量shared_var,初始值为0;创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程均不断地循环,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1观察程序运行的结果,并对你看到的现象进行解释。
时间: 2024-02-22 19:00:20 浏览: 23
以下是实现该程序的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int shared_var = 0;
void *decrement(void *arg) {
while (1) {
shared_var--;
printf("Decrement Thread: shared_var = %d\n", shared_var);
}
}
int main() {
pthread_t tid;
int ret;
ret = pthread_create(&tid, NULL, decrement, NULL);
if (ret != 0) {
printf("Error: pthread_create() failed\n");
exit(EXIT_FAILURE);
}
while (1) {
shared_var++;
printf("Main Thread: shared_var = %d\n", shared_var);
}
return 0;
}
```
程序中通过pthread_create函数创建了一个新的线程,新线程不断地对shared_var进行减1操作并输出,而主线程则不断地对shared_var进行加1操作并输出。
当程序运行时,我们会看到两个线程交替执行,不断地对shared_var进行加减操作,而输出结果会因为两个线程的执行顺序和时间差异而不同。由于两个线程都在对shared_var进行操作,因此可能会出现竞争条件导致shared_var的值不如预期。在这种情况下,可以使用互斥锁来保护共享变量,确保两个线程不会同时访问共享变量。