按照如下要求写一个能够在linux中实现的c语言程序:创建两个线程:一个生产者线程和一个消费者线程。生产者线程(循环)将生成一个数字(数字不固定),并将其存储在一个共享变量中,然后通知消费者线程。消费者线程将(循环)等待条件变量被通知,然后读取并打印该数字。
时间: 2024-10-14 11:16:09 浏览: 23
为了在Linux中实现这个C语言程序,我们将使用`pthread`库来创建线程和管理同步机制。首先,确保已包含头文件`#include <pthread.h>`。下面是一个简化的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h> // 使用信号量(Semaphore)
#include <pthread.h>
#define MAX_NUM 100
sem_t shared_var; // 共享变量,用于同步线程操作
int num = 0; // 生产者产生的数字
void* producer_thread(void* arg) {
int i;
for (i = 0; i <= MAX_NUM; ++i) {
sem_wait(&shared_var); // 等待消费者消费
printf("Producer produced number %d and stored in shared variable.\n", i);
num = i; // 更新共享数
sem_post(&shared_var); // 通知消费者
}
pthread_exit(NULL);
}
void* consumer_thread(void* arg) {
while (1) {
sem_wait(&shared_var); // 等待生产者更新
if (num != 0) {
printf("Consumer consumed number %d.\n", num);
num = 0; // 消费后清零
} else {
printf("No number available to consume.\n");
}
sem_post(&shared_var); // 解锁其他线程继续
}
pthread_exit(NULL);
}
int main() {
pthread_t producer_thread_id, consumer_thread_id;
// 初始化信号量
sem_init(&shared_var, 0, 1);
// 创建生产者线程
if (pthread_create(&producer_thread_id, NULL, producer_thread, NULL)) {
perror("Error creating producer thread");
exit(EXIT_FAILURE);
}
// 创建消费者线程
if (pthread_create(&consumer_thread_id, NULL, consumer_thread, NULL)) {
perror("Error creating consumer thread");
exit(EXIT_FAILURE);
}
// 等待线程结束
pthread_join(producer_thread_id, NULL);
pthread_join(consumer_thread_id, NULL);
// 清理资源
sem_destroy(&shared_var);
return 0;
}
```
阅读全文