Ruling out arbitrary cost copy construction?

Steven Schveighoffer schveiguy at yahoo.com
Thu Nov 4 13:29:38 PDT 2010


On Thu, 04 Nov 2010 16:22:27 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 11/4/10 3:09 PM, Steven Schveighoffer wrote:
>> On Thu, 04 Nov 2010 15:55:07 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> On 11/4/10 2:45 PM, Steven Schveighoffer wrote:
>>>> On Thu, 04 Nov 2010 14:38:59 -0400, Andrei Alexandrescu
>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>> I think this can be made to work and has good properties, although a
>>>>> fair amount of details need to be figured out. Please share any
>>>>> thoughts you may have.
>>>>
>>>> What if a thread no longer exists? Would there be a way to mark such
>>>> dtors that need this feature?
>>>
>>> Probably a thread that dies (by crashing) will never call its
>>> destructors.
>>
>> It is quite possible that a thread exits while there are active,
>> non-GC'd objects owned by it in the heap. There's no way to determine
>> this when the thread exits without running a GC collection, which is
>> unacceptable.
>
> Oh, I see. Indeed, thread cleanup code should also go down the worklist  
> and call destructors. By definition, no unshared objects should be  
> visible by other threads.

Well, yes, but not exactly :)  You see, an object could not have been  
targeted for destruction by the GC until *after* the thread that allocated  
it has exited.  I suspect that the right answer here is for the GC to just  
destroy it, but if it's not equipped to run those dtors, it might be a  
sticky thing to implement.

So the object isn't in the worklist when the thread exits, and it doesn't  
get marked for destruction until some other thread runs a GC cycle.

-Steve


More information about the Digitalmars-d mailing list