Linux线程生产者消费者经典代码
时间: 2023-05-26 18:05:40 浏览: 66
以下是Linux下生产者-消费者经典代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX 10
int buffer[MAX];
int fill = 0;
int use = 0;
void put(int value) {
buffer[fill] = value;
fill = (fill + 1) % MAX;
}
int get() {
int tmp = buffer[use];
use = (use + 1) % MAX;
return tmp;
}
int loops = 100;
void *producer(void *arg) {
int i;
for (i = 0; i < loops; i++) {
put(i);
}
return NULL;
}
void *consumer(void *arg) {
int i;
for (i = 0; i < loops; i++) {
int tmp = get();
printf("%d\n", tmp);
}
return NULL;
}
int main(void) {
pthread_t p, c;
pthread_create(&p, NULL, producer, NULL);
pthread_create(&c, NULL, consumer, NULL);
pthread_join(p, NULL);
pthread_join(c, NULL);
return 0;
}
```
该代码使用一个大小为10的循环缓冲区实现生产者消费者模型。生产者在缓冲区中放入数据,消费者从缓冲区中取出数据。请注意,在填充缓冲区时,使用了一个环形队列,这使得缓冲区在一段时间内能够重复使用。缓冲区是共享状态,因此需要使用互斥量来确保不会发生竞争条件。