<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <title></title>
  </head>

  <body>
    <p style="margin: 0px;"><span> </span></p>

    <p style="margin: 0px;"> </p>

    <div style="margin: 5px 0px 5px 0px;">
      <br/>
       Martin <lazarus@mfriebe.de> hat am 27. Juni 2011 um 14:47 geschrieben:<br/>
      <br/>

      <blockquote style="margin-left: 0px; padding-left: 10px; border-left: solid 1px blue;" type="cite">
        On 10/06/2011 12:26, Henry Vermaak wrote: 

        <blockquote type="cite">
          On 10/06/11 02:09, Hans-Peter Diettrich wrote:<br/>

          <blockquote type="cite">
            <br/>
             What is "thread safe"?<br/>
          </blockquote><br/>
           The definition is very clear here:<br/>
          <br/>
           <a href="http://en.wikipedia.org/wiki/Thread_safety">http://en.wikipedia.org/wiki/Thread_safety</a><br/>
        </blockquote><br/>
         "A piece of code is <strong>thread-safe</strong> if it can be safely invoked by multiple threads at the same time"<br/>
        <br/>
         Just to point out first, I am aware of the discussion this has already sparked, and in the light of any argument of that discussion, in my opinion this definition is correct.<br/>
        <br/>
         Yet I came to think of a case, for which I wonder, and would like to hear opinions, if indeed the above statement is complete.<br/>
         My query is about the part: "at the same time"
      </blockquote>
    </div>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;">Think about "safely invoked" as no need for extra precautions to call it multi threaded, like e.g. critical sections or check which thread is running. </p>

    <p style="margin: 0px;">Obviously "thread-safe" does not extend the safety nor does it fix any kind of flaw that is already there when called single threaded. </p>

    <p style="margin: 0px;">And "thread safe" does not mean that calling a function multi threaded will give the same results as called single threaded. Although typically it does. </p>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;">And look up the definition of "function". A function is defined by the input, output and task. Failing means for some input the wrong output is returned. Input/Output are not only parameters. </p>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;"> </p>

    <div style="margin: 5px 0px 5px 0px;">
      <blockquote style="margin-left: 0px; padding-left: 10px; border-left: solid 1px blue;" type="cite">
        <br/>
         Now a piece of code could for example mix up thread local and thread global data:<br/>
         - cache access to thread local data in a thread global way. Subsequent calls from another thread may fail.<br/>
         - create an initialize some data, and store it thread-local, while flagging it's existence thread global. Subsequent calls from another thread may fail.
      </blockquote>
    </div>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;">The "fail" depends on how you define the task of the function.</p>

    <p style="margin: 0px;">I guess with "fail" you mean the function can fail its tasks when called multi threaded. Then it is by definition not thread safe.</p>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;"> </p>

    <div style="margin: 5px 0px 5px 0px;">
      <blockquote style="margin-left: 0px; padding-left: 10px; border-left: solid 1px blue;" type="cite">
        Even if such code was using some sort of locking (mutex, criticalsection, ...) it would fail. It would not need to be executed from several threads "at the same time", it fails if executed by several threads subsequently.<br/>
        <br/>
         However so far of course each of those would also fail, if called "at the same time". So all my examples are indeed covered by the original definition.<br/>
        <br/>
         The question is, is it prooven, or can it be prooven, that no code can be constructed, that would "not fail if called at the same time", but that would fail if called "subsequently"
      </blockquote>
    </div>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;">"At the same time" includes "subsequently", for the simple reason that critical sections are allowed, which simply turns a parallel (at the same time) into a sequential one. </p>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;"> </p>

    <div style="margin: 5px 0px 5px 0px;">
      <blockquote style="margin-left: 0px; padding-left: 10px; border-left: solid 1px blue;" type="cite">
        That would be code, for which *during* its execution  the application would be in a state valid to enter the code in another thread, but *after* it's execution, this validity would no longer be given.<br/>
        <br/>
         If such code can be constructed, then would the above statement have to be extended to "subsequent calls of the piece of code" ?
      </blockquote>
    </div><br/>
    <br/>
    Mattias<br/>
    <br/>
  </body>
</html>