【问题标题】:producer consumer concurrency without waiting POSIX生产者消费者并发无需等待 POSIX
【发布时间】:2023-04-09 19:13:02
【问题描述】:

我有一定的资源,两个线程一个是生产者,另一个是消费者。 生产者每隔一段时间都会更新资源,更新需要一些时间,我不希望消费者等待。我希望他在生产者更新时使用资源的旧值。 如何在不让消费者等待的情况下同步两个线程

【问题讨论】:

  • 是什么让你现在等待?
  • POSIX 线程互斥锁和 try-lock 函数?参见例如this old question 及其答案。然后消费者尝试定期轮询资源,如果它未能锁定互斥锁,就好像什么都没发生一样继续。
  • 这个问题是否与自旋锁有关?
  • 取决于您的设置。您可以创建一个新资源并在完成后将其复制过来吗?如果没有,我们需要了解有关设置的更多信息

标签: c concurrency posix


【解决方案1】:

您可以拥有一个原子指针,消费者通过它读取生产者生产的内容。生产者生成新数据后,将原子指针的值更改为指向该新数据。

【讨论】:

    【解决方案2】:

    共享资源在更新/读取时必须被锁定。我猜消费者可以将资源复制到自己的缓冲区中?还是需要同样长的时间?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多