上一篇
在Linux线程编程中,多线程同步是确保程序正确运行的关键技术。本文将详细讲解如何使用POSIX信号量实现经典的生产者-消费者模型,帮助小白从零掌握并发编程基础。
生产者-消费者模型是一种多线程设计模式,其中生产者线程生成数据,消费者线程处理数据,它们通过共享缓冲区通信。为了避免数据竞争,需要使用同步机制协调访问。
POSIX信号量是Linux系统提供的同步工具,用于控制线程对共享资源的访问。在生产者-消费者模型中,通常使用两个信号量:一个表示缓冲区空位数量,另一个表示缓冲区中数据项数量。
#include#include #include #include #define BUFFER_SIZE 5int buffer[BUFFER_SIZE];int in = 0, out = 0;sem_t empty, full;pthread_mutex_t mutex;void *producer(void *arg) { for (int i = 0; i < 10; i++) { sem_wait(&empty); pthread_mutex_lock(&mutex); buffer[in] = i; printf("生产者生产: %d", i); in = (in + 1) % BUFFER_SIZE; pthread_mutex_unlock(&mutex); sem_post(&full); sleep(1); } return NULL;}void *consumer(void *arg) { for (int i = 0; i < 10; i++) { sem_wait(&full); pthread_mutex_lock(&mutex); int item = buffer[out]; printf("消费者消费: %d", item); out = (out + 1) % BUFFER_SIZE; pthread_mutex_unlock(&mutex); sem_post(&empty); sleep(2); } return NULL;}int main() { pthread_t prod, cons; sem_init(&empty, 0, BUFFER_SIZE); sem_init(&full, 0, 0); pthread_mutex_init(&mutex, NULL); pthread_create(&prod, NULL, producer, NULL); pthread_create(&cons, NULL, consumer, NULL); pthread_join(prod, NULL); pthread_join(cons, NULL); sem_destroy(&empty); sem_destroy(&full); pthread_mutex_destroy(&mutex); return 0;}
此代码展示了多线程同步的核心:使用POSIX信号量和互斥锁确保生产者-消费者模型在Linux线程环境中的安全运行。信号量empty和full分别控制缓冲区空位和数据数量,互斥锁保护缓冲区访问。
通过本教程,你学习了基于POSIX信号量的生产者-消费者模型实现。掌握这些多线程同步技术,能帮助你在Linux线程编程中构建高效、可靠的并发应用。持续练习POSIX信号量和生产者-消费者模型,以深化对并发编程的理解。
本文由主机测评网于2026-01-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260117166.html