Operating system 信号量解决方案是否适用于多生产者-消费者?

Operating system 信号量解决方案是否适用于多生产者-消费者?,operating-system,synchronization,semaphore,producer-consumer,Operating System,Synchronization,Semaphore,Producer Consumer,这就是最大缓冲区大小的问题。如果缓冲区已满,生产者无法生产,如果缓冲区为空,消费者需要等待。显然,这种使用信号量的解决方案只适用于单个生产者和消费者。有人能解释一下为什么它不适用于多个生产者和消费者吗 has_space = Semaphore(max_num) has_elements = Semaphore(0) mutex = lock() def producer(): has_space.acquire() with mutex: # add elements

这就是最大缓冲区大小的问题。如果缓冲区已满,生产者无法生产,如果缓冲区为空,消费者需要等待。显然,这种使用信号量的解决方案只适用于单个生产者和消费者。有人能解释一下为什么它不适用于多个生产者和消费者吗

has_space = Semaphore(max_num)
has_elements = Semaphore(0)
mutex = lock()

def producer():
  has_space.acquire()
  with mutex:
      # add elements
  has_elements.release()

def consumer():
  has_elements.acquire()
  with mutex:
      # retrieve elements
  has_space.release()

您的示例经历了比赛条件。 你真的需要一些条件变量。仅仅使用信号量是无法确保多个生产者没有写入一个完整的缓冲区,或者多个消费者没有从一个空的缓冲区读取数据的


单一生产者、单一消费者模型只是在生产者行动之前阻止消费者,然后在消费者行动之前阻止生产者。没有指示共享缓冲区是空的还是满的。请注意,信号量计数与缓冲区的满或空条件不同。

您的示例遇到竞争条件。 你真的需要一些条件变量。仅仅使用信号量是无法确保多个生产者没有写入一个完整的缓冲区,或者多个消费者没有从一个空的缓冲区读取数据的


单一生产者、单一消费者模型只是在生产者行动之前阻止消费者,然后在消费者行动之前阻止生产者。没有指示共享缓冲区是空的还是满的。请注意,信号量计数与缓冲区的满或空状态不同。

要让多个生产者工作,我们需要确保每个生产者从缓冲池中退出唯一的缓冲区节点。 为了让多个生产者-消费者同步工作,您需要一个线程安全缓冲区队列的实现,请检查


多个生产者的实现-可以找到使用线程安全缓冲队列的消费者。

要让多个生产者工作,我们需要确保每个生产者从缓冲池中退出唯一的缓冲节点。 为了让多个生产者-消费者同步工作,您需要一个线程安全缓冲区队列的实现,请检查


可以找到使用线程安全缓冲队列的多生产者-消费者的实现。

这不是python,而是非常糟糕的伪代码。某些锁只在两个进程之间工作,而不是python。这是非常糟糕的伪代码。某些锁只在两个进程之间工作