Threads and static initialization.

Michel Fortin michel.fortin at michelf.com
Fri Dec 17 16:43:19 PST 2010


On 2010-12-17 19:15:07 -0500, Jonathan M Davis <jmdavisProg at gmx.com> said:

> On Friday 17 December 2010 16:02:27 Michel Fortin wrote:
>> On 2010-12-17 16:47:05 -0500, wrzosk <dprogr at gmail.com> said:
>>> I believe that when new thread is being created, all static data is
>>> initialized inside new thread. What worries me is the fact, that many
>>> 'mini' threads will initialize all static data inside application. This
>>> may be somewhat time consuming.
>>> Maybe there should be a possibility to define 'Pure' thread that doesnt
>>> touch any static data, and in turn it could leave static constructors
>>> untouched.
>>> 
>>> What do you think
>> 
>> You mean something like this:
>> 
>> 	pure void doSomething(Tid parent) {
>> 		int result = 1 + 1;
>> 		parent.sendMessage(result);
>> 	}
>> 
>> 	void main() {
>> 		spawn(&doSomething);
>> 		... wait for message ...
>> 	}
>> 
>> Perhaps 'spawn' could do this when you feed it with a pure function.
> 
> That would only work if send() can be pure, and I really doubt that it can be.
> If it _can_, then that might be a good optimization, but I'm betting that it
> can't be done. Someone more familiar with how send() work would have to say on
> that though, since I'm not intimately familiar with how send() works.

That's an interesting question.

There isn't much difference between sendMessage and appending a value 
to an array. A pure function can append things to a mutable array it 
gets as a parameter, so why couldn't it append to another thread's 
message queue it gets as a parameter?

Your question is probably more about wether manipulating 
synchronization primitives should be pure or not. Things like locking a 
mutex or waiting on a condition. I don't see why they should not. 
Consider a strongly pure function that creates its own synchronization 
primitive for internal usage; how is that going to affect the rest of 
the program considering that no other parts of the program has access 
the same instances of those primitives?

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/



More information about the Digitalmars-d mailing list