用C++实现一个多线程通讯
时间: 2024-04-18 14:08:40 浏览: 17
以下是一个使用C实现的多线程通信示例:
```
#include <stdio.h>
#include <pthread.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int count = 0; // 缓冲区中元素个数
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 初始化互斥锁
pthread_cond_t cond_producer = PTHREAD_COND_INITIALIZER; // 初始化条件变量(生产者)
pthread_cond_t cond_consumer = PTHREAD_COND_INITIALIZER; // 初始化条件变量(消费者)
void *producer(void *arg) {
int i;
for (i = 0; i < 20; i++) {
pthread_mutex_lock(&mutex); // 加锁
while (count == BUFFER_SIZE) { // 缓冲区满了,等待消费者消费
pthread_cond_wait(&cond_producer, &mutex);
}
buffer[count++] = i; // 生产一个元素
printf("生产者线程 %ld 生产了 %d\n", pthread_self(), i);
pthread_cond_signal(&cond_consumer); // 通知消费者消费
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_exit(NULL);
}
void *consumer(void *arg) {
int i, data;
for (i = 0; i < 20; i++) {
pthread_mutex_lock(&mutex); // 加锁
while (count == 0) { // 缓冲区空了,等待生产者生产
pthread_cond_wait(&cond_consumer, &mutex);
}
data = buffer[--count]; // 消费一个元素
printf("消费者线程 %ld 消费了 %d\n", pthread_self(), data);
pthread_cond_signal(&cond_producer); // 通知生产者生产
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_exit(NULL);
}
int main() {
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, producer, NULL);
pthread_create(&tid2, NULL, consumer, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
```
在这个示例中,有两个线程:生产者和消费者。它们共享一个缓冲区,生产者将元素放入缓冲区中,而消费者从缓冲区中取出元素。当缓冲区满了,生产者就会等待消费者消费;当缓冲区空了,消费者就会等待生产者生产。这个示例使用了互斥锁和条件变量来实现线程间的同步和互斥。