我是不是需要明确停止其引用已重新分配的代码?

Posted

技术标签:

【中文标题】我是不是需要明确停止其引用已重新分配的代码?【英文标题】:Do I need to explicitly stop a ticker whose reference has been reassigned?我是否需要明确停止其引用已重新分配的代码? 【发布时间】:2017-03-28 18:55:10 【问题描述】:

我使用time.Ticker 定期做一些事情。我希望能够更改stuff 发生的频率:

for 
        select 
        case <-ticker.C:
            //do stuff
        case t := <-newTicker:
            oldTicker := ticker
            ticker = t
            oldTicker.Stop()
        
    

我是否需要清理代码以避免内存泄漏,或者将重新分配ticker

case ticker := <-newTicker:

够了吗?

【问题讨论】:

来自文档“停止代码以释放相关资源。” 【参考方案1】:

正如JimB 提到的time 包GoDoc。

time.NewTicker下,提到了以下内容。

停止代码以释放相关资源。

如果您运行 oldTimer.Stop()oldTicker 将在退出 case 语句后被垃圾回收,因为它超出了范围。

【讨论】:

在这种情况下,尝试关闭频道会出现以下错误:cannot close receive-only channel。 This question 表示不必关闭每个通道,垃圾收集器会发现oldTicker.C 可以被清理。我担心的是,如果这运行一段时间,将会有很多 oldTickers 留在周围。 很抱歉。您链接到的答案是正确的。 'timer.C' 是一个只接收频道&lt;-chan Time。答案的最后一部分是错误的。

以上是关于我是不是需要明确停止其引用已重新分配的代码?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我需要将默认引用参数定义为 const 以便我可以为其分配左值? [复制]

读卡器,由于该设备有问题,Windows 已将其停止。 (代码 43)

C++ - 从客户端代码中隐藏模板参数

由于该设备有问题,Windows 已将其停止。 (代码 43)

重新分配错误但不是malloc?

由于该设备有问题,Windows 已将其停止. (代码 43)