Threading bugs
Johan Granberg
lijat.meREM at OVEgmail.com
Tue Jun 26 14:40:32 PDT 2007
Tristam MacDonald wrote:
> Oh cripes, right, with that fixed your wait solution works fine, but I
> still can't find why destructors are not called at termination with
> threads?
An old newsgroup post by Walter
http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=11455
i don't like this behavior myself but that's it.
> Johan Granberg Wrote:
>
>> Tristam MacDonald wrote:
>>
>> > Hmm, I don't see anything relevant in either the changelog or the news
>> > group (haven't finished searching the latter though).
>> >
>> > I am not sure I understand, shouldn't all remaining objects have their
>> > destructors called when the program exits? What would happen if the
>> > object had a non trivial destructor (dispose of shared memory, flush an
>> > iostream, etc.)?
>> >
>> > The point I don't understand, is why is this only the case when I am
>> > using threads? And I think the thread implementation may be a little
>> > buggy here anyway, why on earth would the assert statement below cause
>> > a 'Bus Error'?
>>
>> Because you are redeclaring worker in the Main constructor, change this
>> line
>> Thread worker = new Thread(&workerMain);
>> to this
>> worker = new Thread(&workerMain);
>>
>> and it will probably work.
>>
>> > class Main
>> > {
>> > this() {
>> > writefln("starting");
>> >
>> > Thread worker = new Thread(&workerMain);
>> > worker.start();
>> > }
>> > ~this() {
>> > writefln("ending");
>> > }
>> >
>> > int workerMain()
>> > {
>> > writefln("In Thread");
>> > return 0;
>> > }
>> >
>> > Thread worker;
>> > }
>> >
>> > int main()
>> > {
>> > Main m = new Main();
>> >
>> > assert(m.worker.getState() == Thread.TS.TERMINATED, "Thread not
>> > done!");
>> >
>> > return 0;
>> > }
>>
More information about the Digitalmars-d-learn
mailing list