Same for me. It seem more 'intuitive' for me that each thread really has it's 
own initial value, even when the value by itself is the same.
 
Is there or should we have some "static shared" where the pointer could be 
shared ?
 
Regard,
 
JF,
 
De : harbour-boun...@harbour-project.org 
[mailto:harbour-boun...@harbour-project.org] De la part de Viktor Szakáts
Envoyé : lundi 19 janvier 2009 20:36
À : Harbour Project Main Developer List.
Objet : Re: [Harbour] MT questions
 
+1 for handling them separately. (reasons: more coherent/expected behaviour, 
quicker and more compact code, since inline initialization can be used without 
concerns. It's a light reasoning after doing a quick scan on my source and 
spotting 
quite some places where current behaviour is a potential problem.)
 
Brgds,
VIktor
 
On Mon, Jan 19, 2009 at 7:58 PM, Przemyslaw Czerpak <dru...@acn.waw.pl> wrote:
On Mon, 19 Jan 2009, Lorenzo Fiorini wrote:

Hi Lorenzo,

> For example I have a static array that keeps the menu prompts. At the
> start the menus are correct since every "module" has its own own
> prompts but if I choose an entry in one app I get that entry disabled
> in another app or not disabled at all.
> If I launch the same app with a parameter that start only one thread
> at time it works as expected.
> Surely I'm missing sth or I am misunderstood how the "thread static" works.
> Any suggestion?
Probably you are asking about the same thing as Pritpal was few weeks
ago. Should we clone or simply copy thread static initial value.
Now it's copied so the behavior is the same as for:

  proc main()
     local a:={}
     ? len(a)
     p(a)
     ? len(a)
  return
  proc p(x)
     aadd(x,0)
  return

Please note that p() changes the body of 'a' because 'a' and 'x'
local variables shares the same array body.
The same happens now for thread static variables initial value.
Each thread has its own thread static variable but they share
initialization data when it's complex item (hash or array) so
when you modify them in one thread in other modifications are
visible. If you want to eliminate this behavior you should
initialize the variable from source code, f.e.:
  if s_var == NIL
     s_var := {}
  endif
anyhow it's still open the question about Harbour default behavior.
I can change it and instead of copping initialization data to thread
static variable I can clone it. In other words the original initialization
value will be always kept in hidden HVM structures and cloned when each
thread access it 1-st time. Such modification will effect only hashes
and array values. All other types will be unchanged.
Seems that you are the second person confused by current behavior and
probably not the last one and this is important argument for me to
think about changing it.
What's the group opinion about it?

best regards,
Przemek
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour
 
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to