[Insight-users] Thread safety of itkMultiThreader

Hannu Helminen Hannu.Helminen.0001@dosetek.varian.com
Wed, 02 Oct 2002 10:42:17 +0300


--=====================_409460421==_
Content-Type: text/plain; charset="us-ascii"; format=flowed


Hello all,

Overall, the exception safety of itk is very good. But one area where 
exceptions are not gracefully handled is the itkMultiThreader. If any of 
the worker thread throws, this causes at least in Win32 a program fault, 
since each thread is expected to catch its own exceptions. And also if the 
main thread fails, it does not clean up the worker threads correctly, as it 
should.

I think that the correct behavior would be for each worker thread to catch 
all exceptions using the catch(...) construct, and then signal the main 
thread that a failure has occurred. And if the main thread notices the 
problem, it first cleans up the other threads and then re-throws an exception.

I have been bitten by this recently: I have created a progress reporter 
which also lets the user abort the algorithm, which is implemented with an 
exception. This seems to work OK otherwise but not from within the 
multi-threaded algorithms.

To illustrate my point, I have attached a patch. This change has been 
compiled and tested only against Win32 and no threading models, because I 
only have access to those. Nevertheless I attempted to make the code work 
also in the pthreads and sproc threading models. While I was at it, I also 
re-structured the code so that the exception handling will only be written 
once, and all the threading model specific extensions are more grouped 
together.

Since the idea is to illustrate a point, only the SingleMethodExecute 
method was re-touched. But if this patch is accepted, I can create another 
one which also fixes the MultipleMethodExecute.

Best regards,
Hannu Helminen
Varian Medical Systems Finland Oy
--=====================_409460421==_
Content-Type: application/zip; name="ExceptionSafeMultiThreader.zip";
 x-mac-type="705A4950"; x-mac-creator="705A4950"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ExceptionSafeMultiThreader.zip"

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
--=====================_409460421==_
Content-Type: text/plain; charset="us-ascii"; format=flowed

Hannu Helminen
Varian Medical Systems Finland Oy
This is a temporary mail account that may get deleted after spambots 
harvest the email address.
--=====================_409460421==_--