linux操作系统同步互斥代码
时间: 2023-12-20 10:29:27 浏览: 33
以下是一个简单的Linux操作系统同步互斥代码的例子,使用了pthread库中的互斥锁和条件变量:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int count = 0;
pthread_mutex_t mutex;
pthread_cond_t cond;
void *producer(void *arg) {
int item;
while (1) {
item = rand() % 100; // 生成随机数
pthread_mutex_lock(&mutex);
while (count == BUFFER_SIZE) { // 缓冲区满了,等待消费者消费
pthread_cond_wait(&cond, &mutex);
}
buffer[count++] = item;
printf("Producer produced item %d\n", item);
pthread_cond_signal(&cond); // 通知消费者可以消费了
pthread_mutex_unlock(&mutex);
}
}
void *consumer(void *arg) {
int item;
while (1) {
pthread_mutex_lock(&mutex);
while (count == 0) { // 缓冲区空了,等待生产者生产
pthread_cond_wait(&cond, &mutex);
}
item = buffer[--count];
printf("Consumer consumed item %d\n", item);
pthread_cond_signal(&cond); // 通知生产者可以生产了
pthread_mutex_unlock(&mutex);
}
}
int main() {
pthread_t tid1, tid2;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&tid1, NULL, producer, NULL);
pthread_create(&tid2, NULL, consumer, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}
```
该代码实现了一个生产者-消费者模型,使用了互斥锁和条件变量来实现同步互斥。生产者线程生成随机数并将其放入缓冲区,消费者线程从缓冲区中取出数据并消费。当缓冲区满了时,生产者线程等待消费者线程消费;当缓冲区空了时,消费者线程等待生产者线程生产。通过互斥锁和条件变量的配合,实现了线程之间的同步互斥。