【问题标题】:Synchronized list for threaded application线程应用程序的同步列表
【发布时间】:2009-12-11 08:17:06
【问题描述】:

我正在使用活动对象设计模式。

我需要一个列表,其中包含相同类型的用户定义对象。多个写入者将对象推送到列表中,读取者可以定时在队列中等待。

我知道我可以包装一个 STL 列表,但也许在 boost 中有现成的解决方案?我就是找不到。

更新:

应用程序在 Linux (RHEL 5.3) 上运行。

【问题讨论】:

    标签: c++ multithreading boost active-objects


    【解决方案1】:

    有,它被称为互斥体。 (可锁定用于提升..)

    【讨论】:

      【解决方案2】:

      我在我的博客上写了一篇关于如何使用 boost over 编写线程安全队列的文章:

      http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html

      【讨论】:

        【解决方案3】:

        没有已经构建的解决方案,但您会找到所需的积木。查看 boost::thread 库或您当前使用的线程库中的文档,以了解如何授予独占访问权限。通常是通过某种mutex

        【讨论】:

          【解决方案4】:

          如果您使用的是 Windows,那么 microsoft 会提供来自多生产者多消费者无锁列表的代码。

          查找Interlocked Singly Linked Lists

          【讨论】:

          • 如果你想按顺序消费,那么SLIST仅限于多生产者/单消费者。
          • 应该注意“互锁单链表”只有 32 位。
          • 不是真的 MS 已经通过 "cmpxchg16b" 提供了 128 位版本
          【解决方案5】:

          这种类型的容器称为有界/阻塞队列

          尝试this codeproject 页面获取 c# 示例

          Joe Duffy 的《Windows 上的并发编程》一书中很好地解释了整个概念

          【讨论】:

            【解决方案6】:

            如果对象是 POD 类型,您可以将它们写入 Linux 上的 socketpair 并获得您期望的行为。

            【讨论】:

              猜你喜欢
              • 2011-07-16
              • 1970-01-01
              • 1970-01-01
              • 2015-02-06
              • 2018-12-17
              • 2012-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多