PTHREAD_SUSPEND_NP(3)

PTHREAD_SUSPEND_NP(3) | Library Functions Manual | PTHREAD_SUSPEND_NP(3)

# NAME

`pthread_suspend_np`, `pthread_resume_np` —
suspend/resume the given thread

# LIBRARY

POSIX Threads Library (libpthread, -lpthread)

# SYNOPSIS

`#include <pthread.h>`

int
`pthread_suspend_np`(pthread_t thread);

int
`pthread_resume_np`(pthread_t thread);

# DESCRIPTION

The `pthread_suspend_np`() function suspends the thread given as argument. If thread is the currently running thread as returned by pthread_self(3), the function fails and returns `EDEADLK`. Otherwise, it removes the named thread from the running queue, and adds it to the suspended queue. The thread will remain blocked until `pthread_resume_np`() is called on it. In other words, `pthread_resume_np`() resumes the thread given as argument, if it was suspended.

# RETURN VALUES

Both functions return 0 on success and an error number indicating the reason for the failure.

# COMPATIBILITY

These functions are non-standard extensions.

# ERRORS

The `pthread_suspend_np`() function may fail if:

[`EDEADLK`]
  The thread requested to suspend was the currently running thread.
[`ESRCH`]
  The supplied thread was invalid.

The `pthread_resume_np`() function may fail if:

[`ESRCH`]
  The supplied thread was invalid.

# NOTES

Some `pthread_suspend_np`() implementations may allow suspending the current thread. This is dangerous, because the semantics of the function would then require the scheduler to schedule another thread, causing a thread context switch. Since that context switch can happen in a signal handler by someone calling `pthread_suspend_np`() in a signal handler, this is currently not allowed.

In `pthread_resume_np`() the NetBSD implementation does not check if the thread argument is not already suspended. Some implementations might return an error condition if `pthread_resume_np`() is called on a non-suspended thread.

# SEE ALSO

pthread_attr_setcreatesuspend_np(3), pthread_self(3)

July 9, 2010 | NetBSD 9.0