信号量是一种同步机制,用于限制对共享资源的访问。它通常用于解决进程或线程间的同步问题,例如生产者-消费者问题。
sem_init(&entrySem, 0, 0);
sem_init(&slotSem, 0, BUFFER_SIZE);
entrySem 初始值为 0,表示缓冲区中元素个数。
slotSem 初始值为缓冲区大小,表示缓冲区中空闲槽的数量。
sem_wait(&slotSem):空闲槽的数量减一。
生产数据并放入缓冲区。
sem_post(&entrySem): 缓冲区中元素个数加一。
sem_wait(&entrySem):元素个数减一。
消费数据并从缓冲区取出。
sem_post(&slotSem):空闲槽的数量加一。
sem_destroy(&q->slotSem);
sem_destroy(&q->entrySem);
通过这种方式,信号量 entrySem 确保了对缓冲区的互斥访问,而 slotSem 控制了缓冲区中空闲和已用槽的数量,实现了生产者和消费者之间的同步。