I'm skeptical as well. VTK in general is not thread safe *at all* -- to use VTK from multiple threads requires extreme care on the part of the VTK client app...<br><br><div>I am philoposphically opposed to adding "thread safety" to bits of VTK because:</div>
<div>it implies that VTK is generally thread safe, and it is not.</div><div><br></div><div><br></div><div>David C.</div><div><br></div><div><br></div><div><div class="gmail_quote">On Tue, Oct 12, 2010 at 9:54 AM, Moreland, Kenneth <span dir="ltr"><<a href="mailto:kmorel@sandia.gov">kmorel@sandia.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">



<div>
<font face="Calibri, Verdana, Helvetica, Arial"><span style="font-size:11pt">Oh, if I were only to believe it would be that simple.  Don’t forget that many objects rely on reference counting to determine whether they should actually be deleted.  I shudder to think what might happen if reference counts changed while a garbage collection was running.<br>

<br>
-Ken<div><div></div><div class="h5"><br>
<br>
<br>
On 10/12/10 7:36 AM, "David Gobbi" <<a href="http://david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>> wrote:<br>
<br>
</div></div></span></font><div><div></div><div class="h5"><blockquote><font face="Calibri, Verdana, Helvetica, Arial"><span style="font-size:11pt">Hi Ken,<br>
<br>
I see your point.  Indeed, applying a lock just to the WeakPointer<br>
doesn't really do anything.  There might be a way to just put a lock<br>
just around the object deletion decision in vtkObjectBase, without<br>
having it around every decref.  Or there might not.<br>
<br>
   David<br>
<br>
On Tue, Oct 12, 2010 at 7:12 AM, Moreland, Kenneth <<a href="http://kmorel@sandia.gov" target="_blank">kmorel@sandia.gov</a>> wrote:<br>
> I’m skeptical that this code actually provides thread safety.  Your critical<br>
> section is only applied within a weak pointer.  It is not applied within<br>
> vtkObjectBase itself.  While the critical section is running some other<br>
> thread could call unreference and delete the object after the weak pointer<br>
> checks the reference but before the smart pointer increments the reference.<br>
><br>
> I think the only way you are going to get true thread safety is to put a<br>
> critical section somewhere in the register/unregister calls.  However, that<br>
> might slow down everything appreciably.<br>
><br>
> -Ken<br>
><br>
><br>
> On 10/11/10 10:43 PM, "Utkarsh Ayachit" <<a href="http://utkarsh.ayachit@kitware.com" target="_blank">utkarsh.ayachit@kitware.com</a>> wrote:<br>
><br>
> That sounds like a good idea. You have my vote.<br>
><br>
> Utkarsh<br>
><br>
> On Mon, Oct 11, 2010 at 10:35 PM, David Gobbi <<a href="http://david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>> wrote:<br>
>> Hi All,<br>
>><br>
>> The VTK weak pointer implementation is not thread safe because it can<br>
>> be used just like a regular pointer, even though the object itself<br>
>> might be deleted by a separate thread at any time.<br>
>><br>
>> By comparison, "safe" weak pointer like in boost and Qt cannot be used<br>
>> in place of ordinary pointers.  Instead, in order to use them their<br>
>> "GetPointer()"-like methods increment the reference count and then<br>
>> return a smart pointer, which is guaranteed to be valid until it goes<br>
>> out of scope:<br>
>><br>
>> vtkSmartPointer<SomeClass> smartPtr = weakPtr.GetPointer();<br>
>> if (smartPtr.GetPointer() != 0)<br>
>>  {<br>
>>  // do something with smartPtr<br>
>>  }<br>
>> // reference count decremented when smartPtr goes out of scope<br>
>><br>
>> Because VTK's vtkWeakPointer::GetPointer() does not return a smart<br>
>> pointer or do any thread locking, thread-safe use of vtkWeakPointer<br>
>> requires the following:<br>
>><br>
>> vtkSimpleCriticalSection critSec;<br>
>> critSec.Lock();<br>
>> vtkSmartPointer<SomeClass> smartPtr = weakPtr.GetPointer();<br>
>> critSec.Unlock();<br>
>> if (smartPtr.GetPointer() != 0)<br>
>>  {<br>
>>  // do something with smartPtr<br>
>>  }<br>
>><br>
>> If weakPtr.GetPointer() was changed to return a smart pointer, then it<br>
>> could do the locking internally.  This change would be mostly, but not<br>
>> completely, backwards compatible.  What do people think?<br>
>><br>
>>  David<br>
>> _______________________________________________<br>
>> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
>><br>
>> Visit other Kitware open-source projects at<br>
>> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
>><br>
>> Follow this link to subscribe/unsubscribe:<br>
>> <a href="http://www.vtk.org/mailman/listinfo/vtk-developers" target="_blank">http://www.vtk.org/mailman/listinfo/vtk-developers</a><br>
>><br>
>><br>
> _______________________________________________<br>
> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
><br>
> Visit other Kitware open-source projects at<br>
> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="http://www.vtk.org/mailman/listinfo/vtk-developers" target="_blank">http://www.vtk.org/mailman/listinfo/vtk-developers</a><br>
><br>
><br>
><br>
><br>
><br>
>    ****      Kenneth Moreland<br>
>     ***      Sandia National Laboratories<br>
> ***********<br>
> *** *** ***  email: <a href="http://kmorel@sandia.gov" target="_blank">kmorel@sandia.gov</a><br>
> **  ***  **  phone: (505) 844-8919<br>
>     ***      web:   <a href="http://www.cs.unm.edu/~kmorel" target="_blank">http://www.cs.unm.edu/~kmorel</a><br>
><br>
><br>
<br>
<br>
</span></font></blockquote><font face="Calibri, Verdana, Helvetica, Arial"><span style="font-size:11pt"><br>
</span></font><font size="2"><font face="Consolas, Courier New, Courier"><span style="font-size:10pt"><br>
   ****      Kenneth Moreland<br>
    ***      Sandia National Laboratories<br>
***********  <br>
*** *** ***  email: <a href="http://kmorel@sandia.gov" target="_blank">kmorel@sandia.gov</a><br>
**  ***  **  phone: (505) 844-8919<br>
    ***      web:   <a href="http://www.cs.unm.edu/~kmorel" target="_blank">http://www.cs.unm.edu/~kmorel</a><br>
</span></font></font><font face="Calibri, Verdana, Helvetica, Arial"><span style="font-size:11pt"><br>
</span></font>
</div></div></div>


<br>_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtk-developers" target="_blank">http://www.vtk.org/mailman/listinfo/vtk-developers</a><br>
<br>
<br></blockquote></div><br></div>