Re: Any lightweight way for one thread to force another thread to suspend execution?

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Mikael Pettersson
Date: Tuesday, June 24, 2008 - 12:59 am

Eric Smith writes:
 > Andi wrote about my inquire regarding a way to synchronously stop
 > another thread:
 > > Any such mechanism will need a syscall, and it's unlikely that
 > > any syscall will get much cheaper than a kill(SIGSTOP)
 > 
 > Unfortunately, as Bart pointed out, this stops ALL the threads
 > in a process (required for POSIX conformance).  However, it appears that
 > I may be able to do it by creating my threads using clone() with appropriate
 > parameters rather than pthread_create().
 > 
 > The next question, which I haven't yet been able to answer for myself
 > from staring at the kernel sources, is whether sending SIGSTOP is
 > synchronous.  In other words, when the kill() returns, is the target
 > thread already stopped?  Even on an SMP system where the thread may have
 > been executing concurrently on another processor?
 > 
 > If not, the next question will be whether there's a more efficient way
 > to wait for a process to enter the "T" state than busy-polling a file
 > in /proc.

SIGSTOP is unreliable since some other process may wake the
target up with a SIGCONT.

man ptrace(), see the PTRACE_ATTACH request.

(Presumably it will DTRT if you give it a tid not just a pid,
but I haven't tested that.)
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: Any lightweight way for one thread to force another th ..., Mikael Pettersson, (Tue Jun 24, 12:59 am)