【问题标题】:Implementing 'thread-safe" linked list实现“线程安全”链表
【发布时间】:2011-06-11 15:11:29
【问题描述】:

我正在编写一个应用程序,其中多个链接列表在线程之间共享。对链表的操作和往常一样:搜索、插入、删除、修改节点内容。 我遇到了一个实现来保持链接列表操作的整个过程“线程安全”。 http://www.cs.cf.ac.uk/Dave/C/node31.html#SECTION003100000000000000000

但我想知道我是否可以这样做:

lock(mutex)
  link list operation
unlock(mutex)

也就是说,我将一个互斥锁与每个链接列表相关联,并在我开始操作时像上面一样使用它

不胜感激

【问题讨论】:

    标签: c linux thread-safety linked-list


    【解决方案1】:

    这样做是可能的,但是你会牺牲 liveness 因为链表现在一次只能被一个线程访问 - 这可能会导致链表成为你的瓶颈程序。

    考虑一下链表的接口(线程可能调用哪些方法)以及如何保证链表安全,同时允许尽可能多的线程同时使用它。

    例如,如果您将列表用作队列,则一个线程可能将列表尾部的项目入队,而另一个线程将项目出队。

    在创建线程安全实用程序方面存在许多挑战,但您应该尽量做到外科手术,以确保您不会牺牲通过首先并行化您的软件来获得的性能!玩得开心!

    【讨论】:

      【解决方案2】:

      视情况而定。如果您的线程将主要搜索列表而不修改它们,那么实现读取器/写入器锁可能是值得的。只要没有人修改信息,就没有理由阻止其他线程读取信息。但是,如果最常见的操作涉及修改列表或其中的信息,则可能不会有太多收获,因此简单的锁定/执行操作/解锁方案也应该可以工作。

      【讨论】:

      • 选择这个答案,因为它对我更有用......但另一个答案也应该很好用
      • 是全局锁好还是在结构体内部定义锁好
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多