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