线程安全搜索和添加

时间:2012-07-23 20:29:23

标签: linux thread-safety linked-list kernel

我需要能够做到以下几点:

  1. 搜索链接列表。
  2. 如果找不到新节点,则将新节点添加到列表中。
  3. 是线程安全的并且使用rwlock,因为它主要是列表。
  4. 我遇到的问题是当我从read_lock升级到write_lock时,我需要再次搜索列表,以确保在我执行包含read_lock的列表搜索时,其他一些线程没有在write_lock上等待。 / p>

    有没有不同的方法来实现上述而不进行双列表搜索(可能是某种seq_lock)?

1 个答案:

答案 0 :(得分:0)

将链接列表转换为已排序的链接列表。在添加新节点时,您可以再次检查另一个编写器是否在通过仅检查两个节点获取锁定时添加了等效节点,而不是搜索整个列表。您将在每个节点插入上花费更多时间,因为您需要确定新节点的排序顺序,但您不必搜索整个列表就可以节省时间。总的来说,你可能会节省很多时间。