【问题标题】:Multithreading - Synchronization on Unix多线程 - Unix 上的同步
【发布时间】:2010-11-15 18:01:08
【问题描述】:

我在多线程中面临与同步相关的问题。 我有一个共享库,应用程序使用它来构建应用程序。从图书馆 我创建了一个线程来监听请求的到来并对其进行处理,它是实时线程。从库中我调用了一个本质上是同步的 API,它将等待来自其他模块的响应。此 API 与其他模块有一些依赖关系,响应应该在第一个响应之后出现。但有时第二个响应是第一个响应,因此 API 失败,有时它工作正常。互斥锁 arpit 已应用。 谁能告诉我解决问题的方法应该是什么? 我希望我的问题很清楚。

编辑:它在 c + unix 上

【问题讨论】:

  • 了解哪个 Unix 的哪个版本可能会有所帮助。这可能会决定哪些线程库可用。
  • 您的问题不清楚。我猜您遇到的情况是 A 呼叫 B 并且 B 以不同于 A 期望的顺序回复答案?从 B 那里得到的答案是怎样的?它们是否通过 B 调用回调函数通过线程间消息队列、通过套接字?
  • 是的,你很有礼貌。 B 得到了一些其他的答案,现在 A 正在等待答案中的排序。他们正在进入线程。
  • Suse10 是 Linux,而不是 Unix。内核是 2.4 还是 2.6?这两个版本的线程不同。

标签: c multithreading unix synchronization


【解决方案1】:

这将有助于用时序图增强您的问题。

无论如何,按照您的描述,问题可能出在: - 某些库不是为多线程使用而设计的 - 并非所有操作都被互斥锁阻塞(可以找到互斥锁的一个很好的解释here) - 线程/进程优先级 - 混合同步/异步 API(即一个参数由事件返回,而另一个参数使用函数调用设置)

如果您唯一的问题是排序,您也可以尝试增强您的 API,例如使用序列号或时间戳。这样您的代码就可以找到最早的事件。

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2012-11-19
    • 2019-09-07
    • 1970-01-01
    • 2011-11-09
    • 2011-12-28
    相关资源
    最近更新 更多