【发布时间】:2014-02-28 05:38:03
【问题描述】:
我用 C 语言创建了一个程序,它创建了 2 个缓冲区。缓冲区索引包含单个字符,“A”或“b”等...为了了解有关多线程的更多信息,我创建了一组基于生产者/消费者问题的信号量,以从缓冲区中生成字符并使用字符。每个缓冲区有 3 个生产者线程和 10 个消费者线程。消费者从每个缓冲区中取出一个项目,然后报告它(也释放消费项目的内存)。现在,根据我的阅读, sem_wait() 应该在它退出阻塞状态时发出“最长等待线程”的信号(我在一本书和一个在线 POSIX 库中读到了这个)。
现在,这真的是真的吗?
我创建的应用程序应该让消费者和生产者都在同一个 sem_wait() 门等待,但是生产者进入临界区的时间是任何消费者的两倍多。消费者确实有一个额外的信号量要等待,但这不应该有那么大的区别。我似乎无法弄清楚为什么会这样,所以我希望其他人会这样做。如果我在生产者线程上休眠(1),消费者就可以很好地进入并且缓冲区徘徊在 0 个项目周围......就像我认为否则会发生的那样。
另外,线程创建顺序是否应该在我如何构建程序以实现公平性方面发挥任何作用?
IE,以循环方式生产每种类型的一种,直到每个人都被创建并运行。
有没有任何人可以向我描述的方法来建立一个更公平的线程访问系统?我读过创建 FIFO 队列系统可能是一种解决方案,其中最长等待线程具有最高优先级(这是我认为 sem_wait() 无论如何都会做的)。
只是想知道有哪些方法可以用于初级和更高级别的线程。
【问题讨论】:
标签: c multithreading pthreads