Linux 线程安全的搜索和添加

Linux 线程安全的搜索和添加,linux,thread-safety,linked-list,kernel,Linux,Thread Safety,Linked List,Kernel,我需要能够做到以下几点: 搜索链接列表。 如果找不到新节点,请将其添加到列表中。 确保线程安全,并使用rwlock,因为它是列表中最容易读取的。 我遇到的问题是,当我从read_lock升级到write_lock时,我需要再次搜索列表,以确保在我持有read_lock执行列表搜索时,其他线程没有等待write_lock 是否有一种不同的方法来实现上述功能,而无需进行双列表搜索(可能是某种顺序锁)?将链接列表转换为已排序的链接列表。当需要添加新节点时,您可以通过仅检查两个节点,而不是搜索整个列表,

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

搜索链接列表。 如果找不到新节点,请将其添加到列表中。 确保线程安全,并使用rwlock,因为它是列表中最容易读取的。 我遇到的问题是,当我从read_lock升级到write_lock时,我需要再次搜索列表,以确保在我持有read_lock执行列表搜索时,其他线程没有等待write_lock


是否有一种不同的方法来实现上述功能,而无需进行双列表搜索(可能是某种顺序锁)?

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