Linux下用C语言编写一个控制台应用程序,程序中有一个共享的整型变量shared_var,初始值为0;
时间: 2024-02-25 10:56:01 浏览: 116
好的,我可以为您提供一段简单的代码来实现您的需求。以下是一个示例程序,该程序使用了Linux下的pthread库来实现多线程并发访问共享变量。
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS 10
int shared_var = 0;
pthread_mutex_t mutex;
void *thread_func(void *arg) {
int id = *((int *) arg);
int i;
for (i = 0; i < 100000; i++) {
pthread_mutex_lock(&mutex);
shared_var++;
pthread_mutex_unlock(&mutex);
}
printf("Thread %d finished.\n", id);
pthread_exit(NULL);
}
int main() {
pthread_t threads[NUM_THREADS];
int thread_ids[NUM_THREADS];
int i;
pthread_mutex_init(&mutex, NULL);
for (i = 0; i < NUM_THREADS; i++) {
thread_ids[i] = i;
pthread_create(&threads[i], NULL, thread_func, (void *) &thread_ids[i]);
}
for (i = 0; i < NUM_THREADS; i++) {
pthread_join(threads[i], NULL);
}
pthread_mutex_destroy(&mutex);
printf("shared_var = %d\n", shared_var);
return 0;
}
```
在上面的示例程序中,我们定义了一个共享的整型变量`shared_var`,并使用了`pthread_mutex_t`类型的互斥锁来保证多线程并发访问时的互斥性。程序中创建了10个线程来对`shared_var`进行累加操作,每个线程执行100000次累加。最后输出`shared_var`的值。
在主函数中,我们首先初始化了互斥锁,然后创建了10个线程,并让它们执行`thread_func`函数。在`thread_func`函数中,线程执行累加操作前先对互斥锁进行加锁,累加完成后再解锁。最后,线程退出并返回`NULL`。
在主函数中,我们使用`pthread_join`函数来等待所有线程执行完毕。最后,我们销毁了互斥锁,并输出了`shared_var`的最终值。
请注意,上面的示例程序只是一个简单的示例,实际应用中需要根据具体情况进行修改和完善。
阅读全文