views:

395

answers:

2

Can you cancel a Boost Thread as you would a pthread?

I'm writing a simple watchdog to terminate worker threads if they crash and there doesn't seem to be a way to simply cancel a thread in the Boost Thread library.

+7  A: 

They don't support cancel, which is a good thing since it can cause all manner of subtle problems.

Take a look at the section of docs that cover thread interruption and the boost::thread_interrupted exception and fashion something that allows you to accomplish what you want while also cleaning things up.

Duck
It seems like boost thread interruption won't help you if the thread gets stuck in a loop, which is one of the things that I'm trying to protect against. While I'm giving up portability I'm beginning to think that I'm best off using a pthread cleanup handler.
Justin Scheiner
Or put an interruption point(s) somewhere in the loop(s). It shouldn't be much of performance hit, especially if the thread is already long running. And rest of the interruption infrastructure is already in place.
Duck
A: 

They don't support cancelling out of the box (as pointed out by Duck), however depending on the processing going on inside your worker thread(s), I'd consider using a boost::condition to notify the thread that it should finish (cleanly) at the earliest opportunity.

Alan