2011-05-11 76 views
6

将引用计数对象发送给其他线程时,在启动线程之前或在线程内增加计数是否更好?递增引用计数的经验法则是什么?

从更一般的意义上说,我(作为一个函数)是否应该假设传递给我的参数已经被计入了?

+0

这是什么技术参考?不同的技术可能有不同的答案。 (@closevoter:对我来说似乎是一个真正的问题,可能需要一点澄清,但是...) – 2011-05-11 12:37:14

+0

好点,我特指C,但我认为它可能适用于任何不有本地实施的参考计数。 – 2011-05-11 12:39:08

回答

4

在传递对象的新线程内递增计数几乎肯定是错误的。 “父”线程中的任意数量的代码可能会在新的“子”线程运行之前运行,在这种情况下,“父”中的函数可能会返回,执行其他操作,将引用计数递减为0 ,并释放该对象。然后新的线程会触发无效的内存,调用未定义的行为,并且所有的地狱都会破坏。

此外请注意,这样的错误很可能会在很长一段时间内未被发现,因为新线程不会立即运行,这在统计上是不寻常的。事实上,它可能会是您的客户/客户谁首先看到错误... :-)

+0

谢谢!这是我无法想象的那一块......关于父母在孩子可以主张之前释放参考的一点点。 – 2011-05-11 13:52:34