在 Linux 系统中,sleep
命令主要用于进程级别的延时,而不是线程级别的延时。以下是详细分析:
进程级别延时:sleep
命令会使整个进程暂停执行指定的时间
sleep 5 # 整个进程暂停5秒
多线程环境:如果在多线程程序中使用 sleep:
sleep()
的线程会被挂起如果需要实现线程级别的精确延时,可以考虑以下方法:
#include <time.h>
struct timespec req = {0};
req.tv_sec = 0; // 秒
req.tv_nsec = 500000000L; // 500毫秒 (纳秒单位)
nanosleep(&req, NULL);
#include <unistd.h>
usleep(500000); // 500毫秒 (微秒单位)
#include <pthread.h>
#include <time.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 1; // 延时1秒
pthread_mutex_lock(&mutex);
pthread_cond_timedwait(&cond, &mutex, &ts);
pthread_mutex_unlock(&mutex);
usleep
或 nanosleep
sleep
命令只能实现进程级别的延时注意:usleep
在 POSIX 2008 标准中已被标记为废弃,推荐使用 nanosleep
替代。