问题标签 [refcounting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++:多线程和引用对象
我目前正在尝试将单线程程序传递给多线程。该软件大量使用“refCounted”对象,这导致了多线程中的一些问题。我正在寻找一些设计模式或可能解决我的问题的东西。
主要问题是线程之间的对象删除,通常删除只会减少引用计数,当 refcount 等于 0 时,则删除对象。这在单线程程序中运行良好,并且可以通过复制大对象来提高性能。
但是,在多线程中,两个线程可能希望同时删除同一个对象,因为该对象受互斥锁保护,只有一个线程删除该对象并阻止另一个。但是当它释放互斥锁时,另一个线程继续执行无效(释放的对象),这会导致内存损坏。
这是此类 RefCountedObject 的示例
假设两个线程要删除同一个 RefCountedObject,都在 ~RefCountedObject 中并调用 Destroy(),第一个线程已锁定互斥体,另一个正在等待。在第一个线程删除对象后,第二个线程将继续执行并导致空闲内存写入。
任何人都有类似问题的经验并找到了解决方案?
感谢大家的帮助,我意识到我的错误:互斥锁只保护 refCount 指针,而不是 refCount 本身!我创建了一个受互斥保护的 RefCount 类。互斥锁现在在所有 refCounted 对象之间共享。
现在一切正常。
c++ - 为什么 shared_ptr 有一个显式的构造函数
我想知道为什么shared_ptr
没有隐式构造函数。这里没有提到它的事实:为此获得 boost::shared_ptr
(我找到了原因,但认为无论如何发布这将是一个有趣的问题。)
python - 为什么我的 Python C 扩展会泄漏内存?
下面的函数接受一个 python 文件句柄,从文件中读取打包的二进制数据,创建一个 Python 字典并返回它。如果我无休止地循环它,它将不断消耗 RAM。我的 RefCounting 有什么问题?
谢谢参观,
拉森MTL
python - 有没有办法在 Python 中获取对象的当前引用计数?
有没有办法在 Python 中获取对象的当前引用计数?
c++ - AddRef 和函数签名
我一直使用以下规则来签名函数的签名,这些函数根据它们是否执行 AddRef 来返回引用计数的对象,但也想向我的同事解释它......所以我的问题是,下面描述的规则是广泛遵循的规则?我正在寻找(例如)倡导这种风格的编码规则的指针。
如果函数没有添加对对象的引用,则应将其作为函数的返回值返回:
但是,如果函数添加对对象的引用,则对象的指针作为参数传递给函数:
iphone - Objective-C 内存处理 (iPhone)
我不能说我真的了解 Objective-C 中的内存处理,所以我对此有几个问题。
我必须删除下面框中的对象“url”和“urlRequest”还是“urlConnection”负责这样做?
/li>以下对象创建之间有什么区别。是参考。在所有情况下都保留计数器?
/li>分配属性时,是参考。无论是否将“分配”或“保留”设置为属性,计数始终保留?
c - 原子引用计数共享不可变数据是否需要内存屏障?
我有一些不可变的数据结构,我想使用引用计数来管理它们,在 SMP 系统上的线程之间共享它们。
发布代码如下所示:
atomic_dec
需要内存屏障吗?如果是这样,什么样的内存屏障?
附加说明:该应用程序必须在 PowerPC 和 x86 上运行,因此欢迎提供任何特定于处理器的信息。我已经知道 GCC atomic builtins。至于不变性,引用计数是唯一在对象的持续时间内发生变化的字段。
php - 为什么 refcount 是 2 而不是 1?
输出:
输出 :
更新
对答案很失望...
python - python 引用计数
所以 Python 基本参考,第 4 版。说:
造成内存泄漏,解释器需要循环检测算法来删除 a 和 b。但是,当我试图计算出引用计数时,在我看来,最后,a 和 b 的引用计数都归零,因此不需要循环检测算法。喜欢:
引用计数:a = 1,b = 1
引用计数:a = 2,b = 2
引用计数:b['a'] = 1,b = 1
引用计数:a = 0,b = 0
我对引用计数的理解有什么问题?
iphone - 为什么仪器报告泄漏而其参考计数确实变为零
我是新手。我正在使用工具,到目前为止它对我有很大帮助,但我现在很困惑,因为它向我报告了内存泄漏,而它泄露的块历史显示该内存的引用计数最终变为 0 。 这是什么意思?
在这里发不了图片真的很尴尬……所以我不得不用文字来描述它。希望对您来说足够清楚:
事件类型 || 参考 || 责任图书馆 || 负责任的来电者
Malloc || 1 || 我的天气 || +[ForecastData parseSingleForecastWithXMLElement:]
自动释放|| || 我的天气 || +[ForecastData parseSingleForecastWithXMLElement:]
保留 || 2 || 我的天气 || +[ForecastData parseWithData:]
发布 || 1 || 基金会 || +[NSAutoreleasePool 流失:]
保留 || 2 || 基金会 || +[NSThread initWithTarget:selector:object:]
释放 || 1 || 基金会 || +[NSString compare:options:]
发布 || 0 || 我的天气 || +[RootViewController 解除分配]
任何帮助将不胜感激~