C - 释放线程中的数据结构?

时间:2017-02-26 20:26:49

标签: c multithreading data-structures

我刚刚在C中创建了一个LinkedList,我有一个clear函数。

clear函数遍历LinkedList并在每个Node上调用free()。这意味着它是O(n)函数,速度很慢。

我应该创建一个pthread(或其他一些我不知道的线程库),提供我的root节点,将我的LinkedList的root节点设置为NULL,然后让线程清理内存,而列表现在可以立即添加到列表中吗?这样做有危险吗?这意味着用户可以在有足够的空间来解决它之前向LinkedList添加更多数据吗?它就像一张信用卡,但是用于记忆。

这样做是否安全?什么会为这种情况提供强大而快速的代码?

2 个答案:

答案 0 :(得分:1)

当然,如果你用pthreads编译,那么free应该是线程安全的。

安全吗?使用互斥锁确保访问受到保护,不受并发编辑的影响。

你应该这样做吗?将线程隐藏在常见容器结构后面被认为是不好的架构风格。您的库用户将考虑使用clear()一种阻止方法来完成工作。如果库用户需要异步免费,他可以自己分叉一个线程。

链接列表是否必须具有O(n)时间复杂度?如果所有内存都在托管连续块中,则不是真的。

答案 1 :(得分:-1)

我想,在几个主题上分发clear任务并不是一个好主意。

我想,问题在于你有一个主线程调用clear获取一个长列表(需要时间来清除)并被阻止,因为clear函数没有'回来。在这种情况下,也许最好使用主线程和另一个线程"垃圾收集器"等到获得clear命令并开始释放内存之后。

使用2个主题可以帮助您避免阻止来电者,希望我能解决您的问题