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

标签 c multithreading data-structures

我刚刚用 C 语言创建了一个 LinkedList,并且我有一个 clear 函数。

clear 函数遍历 LinkedList 并在每个节点上调用 free()。这意味着它是一个O(n) 函数,非常慢。

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

这样做安全吗?怎样才能为这种情况编写健壮而快速的代码?

最佳答案

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

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

你应该这样做吗?将线程隐藏在通用容器结构后面被认为是糟糕的架构风格。您的库用户会认为 clear() 是一种可以完成工作的阻塞方法。如果图书馆用户需要异步免费,他可以自己创建一个线程。

清除链表是否必须具有 O(n) 时间复杂度?如果所有内存都在托管的连续 block 中,则并非如此。

关于C - 释放线程中的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473833/

相关文章:

c++ - 无法使用cmake编译

c - POSIX 读取 (2),意外行为

java - 在Java中,在当前线程被调用sleep()后,其他线程如何有机会运行但仍然持有锁?

c++ - 在没有全局或静态变量的情况下配置 Bison 和 Flex

java - 表示多对多关系的数据结构

python - 如何在不使用希尔伯特索引的情况下沿希尔伯特曲线对点进行排序?

c++ - 惰性构造 - 虚拟方法与 if-then stub setter/getter

c - system() 的返回值不是执行程序的返回值

如果两种类型不相同导致 C89 中的编译错误

C++ - 如何找出当前线程的创建位置?