pthread sleep linux
Asked Answered
G

6

28

I am creating a program with multiple threads using pthreads.

Is sleep() causing the process (all the threads) to stop executing or just the thread where I am calling sleep?

Guimar answered 3/9, 2010 at 4:44 Comment(0)
S
50

Just the thread. The POSIX documentation for sleep() says:

The sleep() function shall cause the calling thread to be suspended from execution...

Seismoscope answered 3/9, 2010 at 4:47 Comment(2)
Here's what "man 3 sleep" says: "sleep() makes the calling process sleep until seconds seconds have elapsed..." (Ubuntu 10). The function is in unistd.h. Is this documentation wrong or is there a second sleep function?Saucedo
@user48956: For historical reasons, the man pages often use "process" where the behaviour now applies to the "thread" - this is the case in the sleep(3) man page that you refer to. I suggest submitting a bug to Ubuntu about the documentation.Seismoscope
E
12

Try this,

#include <unistd.h>

usleep(microseconds);
Etherealize answered 5/6, 2015 at 3:36 Comment(2)
Yep, that's easier to use than nanosleep in most cases.Vuillard
Note that usleep() is obsolete and has been removed from POSIX.1-2008. You should use either sleep(), or nanosleep() if higher resolution is required.Getaway
M
6

I usually use nanosleep and it works fine. Nanosleep supends the execution of the calling thread. I have had the same doubt because in some man pages sleep refers to the entire process.

Middleweight answered 29/9, 2011 at 8:21 Comment(0)
T
0

In practice, there are few cases where you just want to sleep for a small delay (milliseconds). For Linux, read time(7), and see also this answer. For a delay of more than a second, see sleep(3), for a small delay, see nanosleep(2). (A counter example might be a RasPerryPi running some embedded Linux and driving a robot; in such case you might indeed read from some hardware device every tenth of seconds). Of course what is sleeping is just a single kernel-scheduled task (so a process or thread).

It is likely that you want to code some event loop. In such a case, you probably want something like poll(2) or select(2), or you want to use condition variables (read a Pthread tutorial about pthread_cond_init etc...) associated with mutexes.

Threads are expensive resources (since each needs a call stack, often of a megabyte at least). You should prefer having one or a few event loops instead of having thousands of threads.

If you are coding for Linux, read also Advanced Linux Programming and syscalls(2) and pthreads(7).

Templeton answered 4/7, 2020 at 6:54 Comment(0)
R
0

Posix sleep function is not thread safe. https://clang.llvm.org/extra/clang-tidy/checks/concurrency/mt-unsafe.html

Returnee answered 13/11, 2022 at 11:32 Comment(0)
N
-5

sleep() function does not cease a specific thread, but it stops the whole process for the specified amount of time. For stopping the execution of a particular thread, we can use one pthread condition object and use pthread_cond_timedwait() function for making the thread wait for a specific amount of time. Each thread will have its own condition object and it will never receive a signal from any other thread.

Nahuatlan answered 30/10, 2018 at 14:27 Comment(1)
This is inaccurate. The sleep() will cause the current thread to sleep. See sleep(3). Lots of older man pages still use the word "process," but in reality a thread is a process.Wilcox

© 2022 - 2024 — McMap. All rights reserved.