pthread_sleepon_broadcast()
Unblock waiting threads
Synopsis:
#include <pthread.h>
int pthread_sleepon_broadcast(
const volatile void * addr );
Arguments:
- addr
- The handle that the threads are waiting on. The value of addr is typically a data structure that controls a resource.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The pthread_sleepon_broadcast() function unblocks all threads currently waiting on addr. All affected blocked threads become runnable and are scheduled using the usual scheduling rules, which means the order in which these threads are unblocked (or woken up) is different than the order in which they were blocked.
You should use pthread_sleepon_broadcast() or pthread_sleepon_signal(), depending on the task you're doing:
- Mapping a single predicate to one address
- Use pthread_sleepon_signal().
If you use pthread_sleepon_broadcast(), you must recheck the predicate and reblock if necessary. The first thread to wake up owns the lock; all others must go back to sleep.
If you use pthread_sleepon_signal(), you don't have to recheck the predicate. One thread owns the lock at a time.
- Mapping multiple predicates to one address
- You need to use pthread_sleepon_broadcast() to wake up
all blocked threads.
You must recheck the predicates and reblock if necessary.
You should try to map only one predicate to one address.
Don't use pthread_sleepon_signal() in this case; it could result in a deadlock.
Returns:
- EOK
- Success.
- EINVAL
- Invalid sleepon address.
Classification:
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
