gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:06 25 4
gpt4 key购买 nike

我刚刚用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com