我正在尝试制作生产者/消费者应用程序。问题是,我的生产者填充了整个缓冲区然后消费者正在移除整个缓冲区...消费者假设生产者只要n_insertions
一个就从缓冲区中移除一个项目信号量?
我的代码:
n_consumed
ionic.Platform.exitApp(); // stops the app
window.close();
是一个全局整数,用于计算插入缓冲区的项目数;
new AudioTrack(new Uri("[your soundcloud uri]", UriKind.Absolute), "[Track Name]", "[Artist]", "[Album]", null)
是一个全局整数,用于计算消费者从缓冲区消耗项目的次数。
答案 0 :(得分:3)
在非常高的级别,当你做sem_post(&sem_posTaken)
时,你告诉消费者“嘿!你可以消费一些东西”,但在此之后,取决于处理器调度程序,生产者可以继续生产直到信号量不允许它们,所以也许消费者在生产者插入东西之后或者在3次插入之后消费,谁知道呢?当您尝试对计数器为0的信号量进行sem_wait时,线程被阻塞。
如果要在插入和删除之间进行切换,请尝试将sem_postAvaliable
初始化为1
,这样您最初只允许插入一次,因为其他线程将被阻塞等待{ {1}},那么只有一个消费者可以消耗你在缓冲区中插入的任何内容,依此类推,但请注意,在这种情况下,大小大于1的缓冲区将毫无意义。