【问题标题】:Multiple Queues in a single thread in CC中单个线程中的多个队列
【发布时间】:2018-03-09 23:39:44
【问题描述】:

我最近在一次采访中被问到这个问题。我想知道实现这一点的最佳方法是什么。

假设我有 3 个线程 t1、t2、t3 和两个队列 q1、q2。
t1 向 q1 写入数据
t2 向 q2 写入数据
t3 应尽快从 q1 和 q2 读取数据。

我认为我可以使用条件变量来读取 q1 和 q2。这是可能的还是有更好的方法。

【问题讨论】:

  • 您是否考虑过使用本地套接字 (AF_LOCAL) 进行排队并使用 select()pselect() 函数进行被动等待?
  • @FabienBouleau Pipes 也可以。
  • @FabienBouleau 是的。这种方法是很有可能的。谢谢。知道如何用队列实现同样的效果吗?
  • @AndrewHenle 我过去在管道方面遇到了一些问题。我记得很好,那是你只有一个读者(第一个读者首先服务)。但在这种情况下你是对的,因为只有一个读者。
  • @FabienBouleau 为此使用套接字堆栈或管道?大锤/螺母。

标签: c multithreading synchronization queue pthreads


【解决方案1】:

让 t3 等待信号量。 t1, t2 排队数据并将一个单元发布到信号量。当 t3 运行时,它会轮询两个队列一次以获取要处理的项目(其中一个将有数据),并处理该项目的出队/处理该项目,然后循环返回以再次等待信号量以获取更多项目。

我假设队列类是线程安全的,(否则用互斥锁保护)。

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2014-12-04
    • 2021-12-31
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多