<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
 <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
 </head>
 <body>
  <p style="margin: 0pt;">
   <span>
    <span></span>
   </span>
  </p>
  <p style="margin: 0px; "></p>
  <div style="margin: 5px 0px;">
   <br/>
   Antonio Fortuny <a.fortuny@sitasoftware.lu> hat am 22. März 2012 um 15:32 geschrieben:
   <br/>
   <br/>
   > Hi folks.
   <br/>
   >
   <br/>
   > Wen launching a thread, the process responsible for the thread object
   <br/>
   > creation and the call to TThread.Start and the thread EXECUTE procedure,
   <br/>
   > run in parallel. That's why the SYNCHRONIZE procedure exists and that
   <br/>
   > the developer has to pay attention to not share code between threads.
   <br/>
   > So far, so good.
   <br/>
   > Now imagine that the EXECUTE procedure of a thread creates a useful
   <br/>
   > object (TMyObject) with properties and methods. This thread is launched
   <br/>
   > half a dozen times to process half a dozen simultaneous operations.
   <br/>
   > My question is:
   <br/>
   > How the properties and methods of the TMyObject created in every
   <br/>
   > launched thread are they managed from one thread to another. As far as
   <br/>
   > the data segment is concerned, no problem, I guess that every instance
   <br/>
   > of the TMyObject has its own data in its thread address space: no mix.
   <br/>
   > But what about the code and the local methods stack: will it be shared ?
   <br/>
   > And if answer is yes, to what should I take care ?
  </div>
  <p style="margin: 0px;"> </p>
  <p style="margin: 0px;">Each thread has its own stack.</p>
  <p style="margin: 0px;">All threads share the same address space and the same heap.</p>
  <p style="margin: 0px;">Objects (here: class instances) are created on the heap. The heap is thread safe. </p>
  <p style="margin: 0px;">The data segment is for constants. They are shared. </p>
  <p style="margin: 0px;"> </p>
  <p style="margin: 0px;"> </p>
  <div style="margin: 5px 0px;">
   >
   <br/>
   > The question is far from trivial: I try to keep the EXECUTE procedure as
   <br/>
   > small as possible and spread the code and data over a number of
   <br/>
   > specialized units avoiding to load the EXECUTE procedure stack with
   <br/>
   > heavy data ans structures.
   <br/>
   >
   <br/>
   > I apologize if my question doesn't sound very clear, but it's not even
   <br/>
   > clear in my mind :-[
  </div>
  <p style="margin: 0px;"> </p>
  <p style="margin: 0px;"> </p>
  <p style="margin: 0px;">Mattias</p>
  <p style="margin: 0px;"> </p>
 </body>
</html>