Stopping the execution from outside is very fragile. The main problem is that you don't know, what code is currently executed. A simple idea to accomplish your task is to suspend the thread in which the function executes. That will put the thread into the waiting state. Than you can interrupt this waiting thread. But it is possible, that your code ends up in a deadlock, because if the interrupted thread is not going to free all resources used (like mutex locks or whatever) the code might deadlock. Another point here is that you might likely produce race conditions. If you suspend the thread which currently executes a critical region it might not end up writing all data, so that if interrupt is issued the written objects might have a corrupted state.
There is no exception management in the function. Its code based on C and migrated to C++. I can wrapper it with try catch.
Vadim.
From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Ovanes Markarian
Sent: Monday, December 07, 2009 19:34
Is that function exception-safe?
Regards,
Ovanes
On Mon, Dec 7, 2009 at 6:00 PM, Vadim Ryvchin <vadimryv@gmail.com> wrote:
I can’t change the function so it will check the token, that is my main problem. I want to be able to stop the execution from outside the function.
Thank you anyway,
Vadim.
From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Ovanes Markarian
Sent: Monday, December 07, 2009 18:09
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] Newbie question
I would suggest to introduce a Cancellation Token as parameter to both functions. If one function becomes ready it sets the cancelation flag to true, so that other function can check it and exit. In the most simple case it can be a volatile boolean value passed by reference to both functions.
Hope that helps,
Ovanes
On Mon, Dec 7, 2009 at 1:44 PM, Vadim Ryvchin <vadimryv@gmail.com> wrote:
Hello,
I have a problem with interruption of threads.
I have one function that I want to run in two different threads with different parameters. When one of the function's instances finishes it stops the other instance. I can't change the function's code, but I can write wrapper to it.
My problem is in stopping the other thread. Using timed_join I find which thread is finished, but I can't find a good solution for stopping the second one.
How should I use interrupt method correctly or suggest me for correct thread stopping function.
BTW, I can't just leave the other thread to run, it's very high CPU consumer.
Thank you all.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users