[vtkusers] Thread-safety of New and Delete

eewing eewing at cs.uoregon.edu
Wed Jan 13 18:28:33 EST 2016


Hi David,

By "Filter-by-filter", I meant that each filter threads its work 
separately, so threads are assigned at the beginning of the filter, and 
reassigned at the beginning of the next filter. Also, we're using a 
threadpool threading model with no direct control of the threads in the 
filters, which could be a problem in the future. The I/O I'm trying to 
thread isn't asynchronous, but rather I'm trying to thread the file 
readers so it can execute faster, and read multiple files simultaneously 
that make up a dataset.

-Elliott

On 2016-01-13 15:13, David Gobbi wrote:
> What do you mean by "filter-by-filter" basis? Each filter is in its
> own thread?
> 
> If you need asynchronous IO, then a typical approach is to start the
> thread that does the IO, and then poll that thread until the IO is
> complete.  When the IO is complete, feed the data into your pipeline.
> This solution is not specific to VTK in any way, of course.  It's just
> a general approach to asynchronous IO that works as well with VTK as
> with anything else.  You can also have the thread read the data
> piece-by-piece, which would be a bit more complicated.
> 
> It also works for asynchronous processing.  For long processing tasks,
> we start a QThread that does the processing and emits a signal when
> the processing is done.  When our app receives the signal, it knows
> it's safe to use the result.  In this case Qt is doing the polling for
> us as part of its mainloop.
> 
>  - David
> 
> On Wed, Jan 13, 2016 at 3:39 PM, eewing <eewing at cs.uoregon.edu> wrote:
> 
>> Hi David,
>> 
>> Thanks for the quick response. That actually answers my issue. I'm
>> working on threaded I/O as part of a large pipeline, described by
>> your first example. The pipeline is executed in parts by threads,
>> but on a filter-by-filter basis, with no way to lock data to a
>> specific thread.
>> 
>> What would your recommendation be to mitigate the issue? I've seen
>> a suggestion to create a "I'm accessing VTK" mutex for whenever you
>> are accessing VTK, but I'd like to avoid that if possible.
>> 
>> -Elliott
>> 
>> On 2016-01-13 14:20, David Gobbi wrote:
>> Hi Elliott,
>> 
>> Can you describe your issue in more detail? The VTK New and Delete
>> calls should be thread safe. The two caveats for VTK and threads
>> are:
>> 
>> 1) All classes that do rendering should be in the same thread (all
>> mappers, actors, renderers, etc), and there shouldn't be multiple
>> threads hitting the same rendering context.
>> 
>> 2) Movement of data between threads must be locked or otherwise
>> done
>> in a thread-safe manner.
>> 
>> You would not, for example, create a single pipeline that is
>> accessed
>> from multiple threads. Each thread would have its own pipeline
>> segment, with locks to synchronize a copy (or move) of data from
>> the
>> output of one segment to the input of another segment.
>> 
>> - David
>> 
>> On Wed, Jan 13, 2016 at 2:27 PM, eewing <eewing at cs.uoregon.edu>
>> wrote:
>> 
>> Hello,
>> 
>> I'm running into some issues with VTK in a threaded environment,
>> and it seems that the source of the problem is in VTK's New and
>> Delete calls. So, are the New and Delete calls thread-safe? If not,
>> is there a recommended alternative that I can use inside my
>> threads?
>> 
>> Best,
>> -Elliott Ewing
>> University of Oregon



More information about the vtkusers mailing list