[dmd-concurrency] draft 5

Andrei Alexandrescu andrei at erdani.com
Tue Jan 19 23:13:09 PST 2010


Sean Kelly wrote:
> On Jan 19, 2010, at 10:50 PM, Andrei Alexandrescu wrote:
> 
>> Sean Kelly wrote:
>>> void fnB() {
>>>    // do something that takes a while
>>> }
>>> void fnA() {
>>>    spawn( &fnB );
>>> }
>>> void main() {
>>>    auto tid = spawn( &fnA );
>>>    tid.wait();
>>> }
>>> The main thread doesn't know the thread running fnB exists so it can't wait for it, even if it's doing completely legitimate work and shouldn't be interrupted.  How can I trivially rewrite this program so it completes without error?
>> If fnB does legitimate work and doesn't call concurrency-related routines, it will be waited for.
>>
>> If fnB does call concurrency-related routines, it must end when main() exits. To me exiting main() is a no-quarters situation: it means the application is to exit asap. I find it weird to think of programs that finish main() but continue to do stuff.
> 
> I feel somewhat the opposite.  If some random thread terminates abnormally, why does the app continue to run as if nothing happened?  I'd prefer for every thread, including main, to work exactly the same.

This equivalence sounds more like anarchy than democracy to me. Absent a 
"special" function, designing coherent shutdown becomes harder, not easier.

>> To make sure everything is accounted for, the application design must be such that main() doesn't exit until useful threads are done.
> 
> Yeah, this just seems like it could be troublesome in large apps.

Well they haven't tried the Shutdown approach :o).


Andrei



More information about the dmd-concurrency mailing list