[dmd-concurrency] draft 5

Sean Kelly sean at invisibleduck.org
Tue Jan 19 22:53:53 PST 2010


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.

> 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.


More information about the dmd-concurrency mailing list