Sponsored Content
Top Forums Programming How to sleep and wake a thread??? Post 302582627 by DreamWarrior on Friday 16th of December 2011 02:59:14 PM
Old 12-16-2011
Quote:
Originally Posted by jim mcnamara
As John said above, you probably want your thread to block not sleep. Calls like sleep send SIGALRM to the calling process, not just the thread. This means that you have to set up signal handling for the thread in question, and have all the other threads ignore
SIGALRM (example only, there are other signals)

Using a condition wait or a mutex wait is much more efficient.
sleep doesn't send SIGALRM.

At any rate, pause will work, I've seen people do:

Code:
for ( ; ; ) sleep(UINT_MAX);

And then, as mentioned, pthread_kill can wake it provided the thread hasn't blocked the signal.

Also, as mentioned, there is no way for another thread to cause someone to "go to sleep".

For your edification, this seems like a simple producer-consumer model, and that's usually handled with condition variables. See: pthread_cond_init, pthread_cond_wait, and pthread_cond_signal.
 

7 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Wake on Lan script

Im old to Unix but new to scripting I have a MacBook running osx that I want to use as an nfs client. The server will be a linux box with a wake on lan card. Here's the idea. Run a cron command on the mac every minute that checks if I am on my home wireless network (the linux box is wired to... (0 Replies)
Discussion started by: anon0mus
0 Replies

2. Shell Programming and Scripting

Wake on LAN script

m old to Unix but new to scripting I have a MacBook running osx that I want to use as an nfs client. The server will be a linux box with a wake on lan card. Here's the idea. Run a cron command on the mac every minute that checks if I am on my home wireless network (the linux box is wired to... (6 Replies)
Discussion started by: anon0mus
6 Replies

3. Programming

how to wake up a thread that blocking at epoll_wait?

I have two threads: one maintains a thread-safe message queue (handle this queue at the beginning of every loop) and deals with tcp connections, the other one posts message to the former one. the problem is, while the former one was blocking at epoll_wait, it's not sure that how long until the... (0 Replies)
Discussion started by: cometeor
0 Replies

4. UNIX for Advanced & Expert Users

wake up user space thread from kernel space ISR

Hello, I'm searching for a proper way to let the kernel space ISR(implemented in a kernel module) wake up a user space thread on a hardware interrupt. Except for sending a real-time signal, is it possible to use a semaphore? I've searched it on google, but it seems impossible to share a... (0 Replies)
Discussion started by: aaronwong
0 Replies

5. Shell Programming and Scripting

Wrapping 'sleep' with my 'resleep' function (Resettable sleep)

This is a very crude attempt in Bash at something that I needed but didn't seem to find in the 'sleep' command. However, I would like to be able to do it without the need for the temp file. Please go easy on me if this is already possible in some other way: How many times have you used the... (5 Replies)
Discussion started by: deckard
5 Replies

6. UNIX for Dummies Questions & Answers

Linux Device Driver: how can an ISR wake up a user-thread?

Hi all, Is it possible to do the following in Linux (kernel 2.6.x): - A user-space thread goes to "sleep". Using any call/mechanism - On a hardware generated interrupt, the Interrupt handler (ISR) "wakes" the sleeping user-thread. I have seen wait_event() and wake_up() but it appears... (1 Reply)
Discussion started by: agaurav
1 Replies

7. UNIX for Dummies Questions & Answers

Computer wake commands

I'm a OS X user (MacBook Pro, OS X Lion) and I need it to wake up on Mondays, Wednesdays, Thursdays and Saturdays at 9:00 AM on the rest of the days of the week at 7:00 I issue the following commands: sudo pmset repeat wake MWRS 09:00:00 for the former sudo pmset repeat wake TFU... (1 Reply)
Discussion started by: scrutinizerix
1 Replies
assert_wait_mesg(9r)													      assert_wait_mesg(9r)

NAME
assert_wait_mesg - General: Asserts that the current kernel thread is about to block (sleep) SYNOPSIS
void assert_wait_mesg( vm_offset_t event, boolean_t interruptible, char *message ); ARGUMENTS
Specifies the event associated with the current kernel thread. Specifies a Boolean value that indicates how the kernel thread is awakened. You can pass one of the following values: The current kernel thread is interruptible. This value means that a signal can awaken the current kernel thread. The current kernel thread is not interruptible. This value means that only the specified event can awaken the current ker- nel thread. Specifies a mnemonic for the type of wait. The ps command uses this mnemonic to print out more meaningful messages about a process. DESCRIPTION
The assert_wait_mesgroutine asserts that the current kernel thread is about to block (sleep) until the specified event occurs. This routine sets a thread wait bit in the pointer to the thread structure associated with the current kernel thread. This bit signifies that this ker- nel thread is on the appropriate wait hash queue, waiting for a wakeup call. To actually block (put to sleep) the current kernel thread, call thread_block. To issue a wakeup call on the specified event, call the thread_wakeup_prim or clear_wait routine. CAUTIONS
You must not call assert_wait_mesg from a device driver's interrupt handler. The reason for this is that at interrupt context there is no process to be put to sleep. RETURN VALUES
None SEE ALSO
Data Structures: thread(9s) Routines: clear_wait(9r), current_thread(9r), thread_block(9r) Reference Pages Section 1: ps assert_wait_mesg(9r)
All times are GMT -4. The time now is 11:47 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy