linux

linux的线程同步机制有哪些

小樊
99
2024-12-28 09:20:12
栏目: 智能运维

Linux操作系统提供了多种线程同步机制,以确保多线程环境下共享资源的正确访问。以下是一些常用的线程同步机制:

线程同步机制

使用场景和优缺点

示例代码

以下是一个使用互斥锁和条件变量的简单示例代码,展示了如何在C语言中使用pthread库实现线程同步:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define BUFFER_SIZE 5

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) {
    for (int i = 0; i < 10; ++i) {
        pthread_mutex_lock(&mutex);
        while (count == BUFFER_SIZE) {
            // 缓冲区满,等待消费者消费
            pthread_cond_wait(&cond_producer, &mutex);
        }
        buffer[count++] = i;
        printf("Produced: %d\n", i);
        // 通知消费者可以消费了
        pthread_cond_signal(&cond_consumer);
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}

void *consumer(void *arg) {
    for (int i = 0; i < 10; ++i) {
        pthread_mutex_lock(&mutex);
        while (count == 0) {
            // 缓冲区空,等待生产者生产
            pthread_cond_wait(&cond_consumer, &mutex);
        }
        printf("Consumed: %d\n", buffer[--count]);
        // 通知生产者可以生产了
        pthread_cond_signal(&cond_producer);
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}

int main() {
    pthread_t id1, id2;
    pthread_create(&id1, NULL, producer, NULL);
    pthread_create(&id2, NULL, consumer, NULL);
    pthread_join(id1, NULL);
    pthread_join(id2, NULL);
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond_producer);
    pthread_cond_destroy(&cond_consumer);
    return 0;
}

通过上述代码,可以看到如何使用互斥锁和条件变量来同步生产者和消费者线程,确保缓冲区的正确使用。

0
看了该问题的人还看了