可以将错误的部分的代码先暂停一下,仔细看一下代码,尤其是注释部分。
在使用sem_init初始化信号量时,需要指定以下参数:
sem_t *sem_t_ptr:指向信号量结构体的指针。
int initial_value:信号量的初始值。
int buffer_size:信号量缓冲区的大小。
在上面的代码中,初始化信号量时指定了初始值为1,但是在初始化mutex时,指定了l这个参数。这可能会导致一个未定义的行为。
你可以尝试使用以下代码来解决这个问题:
sem_t mutex;
sem_init(&mutex, 1, sem_init(NULL, 0, sem_init(&empty, 1, BUFFER_LEN)));
sem_t sem;
sem_init(&sem, 0, sem_init(NULL, 1, initial_value));
sem_wait(&sem);
sem_post(&mutex);
sem_post(&sem);