添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

多线程中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依次交替执行。

2、linux系统中sleep函数原型

#include <unistd.h>
unsigned int sleep (unsigned int seconds);

参数:线程挂起秒数

返回值:进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数

3、函数作用

sleep函数的作用是:线程告诉操作系统,在second秒的时间内,自身不需要调度(直接睡觉了),不要给自身分配时间片了。

使cpu更容易易主(因为放弃时间片了,所以就易主了)

1)例如:单线程的例子

int main()
    while(1)
        //do sth.
        sleep(1);
        //do sth.
    return 0;

while(1)死循环,一直在占用CPU,使其他进程得不到cpu资源,使用sleep,使该线程挂起,为其他进程让路。在程序没有时效性或者在程序运行时间允许的范围内添加合适秒数------sleep(seconds).

2)例如:主线程不加sleep,不加pthread_join的多线程

#include<unistd.h>
#include<pthread.h>
void *myFunc(void *p){
    int i=0;
    for(i;i<2;i++){
        printf("myFunc i=%d\n",i);
    printf("son thread...\n");
    return NULL;
int main(){
    pthread_t thread;
    if(pthread_create(&thread,NULL,myFunc,NULL))
        perror("pthread_create fail");
        return -1;
    printf("main thread...\n");
    return 0;

 主线程中,没有使用sleep()函数,则主线程直接输出main thread...便退出了,并没有时间去执行子线程(主线程的时间片内执行到return 0 了,已经进程直接结束,都没有来得及执行子线程的时间片(虽然子线程已经处于就绪态了))

这种情况下,程序一开始一直处于主线程的时间片内。

3)例如:主线程中加sleep

#include<unistd.h>
#include<pthread.h>
void *myFunc(void *p){
    int i=0;
    for(i;i<2;i++){
        printf("myFunc i=%d\n",i);
    printf("son thread...\n");
    return NULL;
int main(){
    pthread_t thread;
    if(pthread_create(&thread,NULL,myFunc,NULL))
        perror("pthread_create fail");
        return -1;
    sleep(1);//添加sleep//此处使用phread_join()函数也可以
    printf("main thread...\n");
    return 0;

 如上所示,主线程中添加了sleep函数,

myFunc i=0 

myFunc i=1

son thread...  

main thread...

sleep(1);主线程挂起了1s,放弃了时间片剩余部分,cpu便去执行子线程了,1s钟后主线程处于就绪态,在子线程时间片结束后,cpu开始继续执行主线程。

个人理解:使用了sleep的同时,线程在second秒时间内处于挂起状态,同时也意味着,放弃了线程当前时间片中剩余的部分,也就是说程序执行到sleep语句后,cpu会立刻转向调度别的线程了。

1、前言多线程中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依次交替执行。2、linux系统中sleep函数原型#include &lt;unistd.h&gt;unsigned int sleep (unsigned int seconds);...
这几天在做一个小项目,其用到了一些基本的API, 例如sleep,获取当前目录等等,lua标准库没有提供这些接口,虽然所第三方库也都有实现,但是要用的就那么几个函数,在一个嵌入式系统安装那么多第三方库有点浪费资源,于是@胜利哥 写了一个socket的C实现,然后给我用。我试着把其他几个函数也用C实现,首先看下怎么用C写lua的拓展。 首先是根据Lua C语言的协议写好调用模块,编译成.so 文件,然后才可以在lua脚本调用。 下面是在Ubuntu14.04 **系统,基于lua5.1** 写的一个sleep实现。 代码如下: *sleep.c 文件 * /*学习写lua
在这里以JAVA的API为例(当然其它语言亦可以),JAVA的API是这么描述的, public static void sleep(long millis, int nanos) throws InterruptedException 在指定的毫秒数
sleep() 方法的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。 这个“正在执行的线程”是指 this.currentThread() 返回的线程。 下面通过一个案例来理解使用 sleep() 方法判断线程是否活动的标准: public class MyThread extends Thread { public void run(){ try { System.out.println("正在运行的线程名称:"+this.currentThread().getNam
这里就不说什么高深莫测的专业术语了,一句话,在泡澡的同时喝咖啡。也就是说在代码同时让多个区域的代码或者说函数同时运行以此达到提高效率的目的。 比如我们有这样一场比赛,小明和小红在做跑步测试,现在他们身上都要一个计时器用于计时。这是他们一个一个测试。就像下面的代码一样。 import threading import time time0=time.time() def print_ming(): time.sleep(5) print('我是小明我跑完了') def print_hong(): time.sleep(3) print(' 本章,会对Threadsleep()方法进行介绍。涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479256.html 1. sleep()介绍 sleep() 定义在Thread.javasleep() 的作用是...
主线程睡眠和暂停  转至:http://blog.chinaunix.net/uid-25324849-id-3198978.html 主要是测试主线程睡眠和主线程暂停是否对子线程有影响:都无影响 1.主线程睡眠 #include #include #include pthread_t ntid; void printids(const char *s)
为什么要用sleep,主要是为了暂停当前线程,把cpu片段让出给其他线程,减缓当前线程的执行。 两种方式: 第一种方式是只调用sleep静态方法;第二种是获取对象后再调用sleep静态方法。第二种方式效率要低一些,因为多了一次函数调用,而且通过对象调用静态方法也不太符合“静态”的定义(静态成员最好通过类名直接访问),但功能上是一致的。当需要调用非静态方法时使用第二种方式,否则直接使用第一种方式。            void  Sleep(DWORD dwMilliseconds); 使用这个函数需要注意几点:    1、使用Sleep函数,将使线程自愿放弃属于它的时间片剩下的部分。    2、系统设置线程不可调度的时间只是“近似于”所设定的毫秒数。
sleep方法: sleep() 方法的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。这个“正在执行的线程”是指Thread.currentThread() 返回的线程。所以主线程的时间并不会因为线程的休眠而受到影响。 举个例子: class MyThread extends Thread { @Override public void run() { try {...
当谈论多线程编程时,以下这些函数是常用的: 1. `sleep()`:使当前线程休眠一段时间。当线程被 `sleep()` 调用挂起时,它会暂停执行,直到指定的时间过去为止。 2. `wait()`:该函数是Java的一个方法,它使一个线程等待,直到另一个线程通知它已经准备好继续执行。通常,这个函数与锁一起使用,以防止多个线程同时访问共享资源。 3. `yield()`:使当前线程放弃 CPU 控制权,使其他线程有机会运行。调用 `yield()` 的线程仍然是可运行的,它只是告诉调度程序可以运行其他线程。 4. `join()`:让当前线程等待其他线程执行完毕后再执行。当在一个线程调用另一个线程的 `join()` 方法时,当前线程将被阻塞,直到另一个线程完成为止。 需要注意的是,这些函数在不同的编程语言的实现可能会略有不同。