有时候程序在一个死循环中执行,不断尝试获取某个资源,如果没有获得就会不断尝试。为了防止程序空跑,可以调用sched_yield函数来主动出让CPU的占有权,减少CPU的空跑。比如自旋锁的实现可以调用sched_yield来减少CPU的空跑。
man一下,查看一下手册:

NAME
       sched_yield - yield the processor

SYNOPSIS
       #include <sched.h>

int sched_yield(void);

DESCRIPTION
       A  process can relinquish the processor voluntarily without blocking by calling sched_yield().  The process will then be moved
to the end of the queue for its static priority and a new process gets to run.

Note: If the current process is the only process in the highest priority list at that time, this process will continue to run
after a call to sched_yield().

POSIX systems on which sched_yield() is available define _POSIX_PRIORITY_SCHEDULING in <unistd.h>.

RETURN VALUE
       On success, sched_yield() returns 0.  On error, -1 is returned, and errno is set appropriately.

文档的大致意思是,通过调用sched_yield函数可以使当前线程以非阻塞方式主动放弃处理器时间片的使用,并根据其优先级别将其放到对应调度队列的
队尾,从而使另一个级别等于或高于当前线程的线程先运行。如果没有高于或者等于当前线程优先级别的线程,那么这个函数会立即返回继续执行当前
线程。

对于放弃CPU的主动权可以用sleep,调用sleep也会让出CPU的占有权,不过不同之处在于,sleep会等待一段时间后再等待CPU的调度。

关于sched_yield()主动出让CPU的占有权相关推荐

  1. 如何写出让 CPU 跑得更快的代码?

    作者 | 小林coding 来源 | 小林coding(ID:CodingLin) 前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更 ...

  2. 面试官:如何写出让 CPU 跑得更快的代码?

    前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...

  3. 如何写出让 CPU 跑得更快的代码

    前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...

  4. C语言线程Yield,C++11多线程-主动让出CPU使用权(yield)

    在多线程的编程中,有时候一个线程需要等待IO操作或者等待其它某个条件满足,再继续执行.为了达到这样的目的,有时我们会写出如下的代码: while(!isDone()); // Bad 这样代码的问题在 ...

  5. java sleep函数让出cpu_线程主动让出CPU

    如何让线程主动让出CPU 由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的.在以下情况下,持有锁的线程会释放锁: (1)执行完同步代码块 ...

  6. 如何写出让CPU跑得更快的代码?

    如何写出让CPU跑得更快的代码? 一.CPU缓存有多快? 二.CPU缓存的数据结构和读取过程是什么样的? 三.如何提升数据缓存的命中率? 论如何写出让CPU跑得更快的代码,由于我们的CPU的主频已经是 ...

  7. python 结束语句_结束语

    python 结束语句 Recently, chatter bots have been used in many services of our day lives. These bots can ...

  8. Linux—进程管理

    1. 进程的概念 Linux是一个多用户多任务的操作系统.多用户是指多个用户可以在同一时间使用同一个linux系统:多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分时管理的 ...

  9. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]

    类的继承 Java只支持单继承,不允许多重继承 - 一个子类只能有一个父类 - 一个父类可以派生出多个子类 这里写图片描述 子类继承了父类,就继承了父类的方法和属性. 在子类中,可以使用父类中定义的方 ...

最新文章

  1. ThinkPHP实现定时执行任务的两种方法 - 博客频道 - CSDN.NET
  2. WINCE6.0+S3C6410的触摸屏驱动
  3. python基础知识面试题-[面试] 1. 关于Python的基础知识
  4. spring25:@Pointcut管理和定义切入点
  5. HDU 4857 拓扑排序 优先队列
  6. 监控系统几种常见的光端机传输方案拓扑图
  7. 熊猫数据集_熊猫迈向数据科学的第一步
  8. 网络安全之SQL注入
  9. 程序员面试金典——2.4链表分割
  10. int.Parse(),int.TryParse(),Convert.ToInt32(), (int)转换为数字类型方法简介
  11. OFD文件如何打印?怎么打开?如何转换PDF?
  12. ssm员工考勤签到请假管理系统 idea maven
  13. Quara 上一些有趣的问答
  14. python编辑器——wingIDE的使用详解
  15. 怎么快速剪裁照片?这款智能剪裁工具你知道吗?
  16. react class的写法
  17. 线性代数基础6--空间的基,维数,以及四种重要子空间.
  18. 计算机主板现状及发展趋势论文,2020年计算机主板发展趋势分析 2020-2026年全球与中国计算机主板市场深度调研与发展趋势分析...
  19. 方正集团面试过程。。。
  20. 今日芯声 | 为学生佩戴头环监测走神,这就是传说中的“紧箍咒”?

热门文章

  1. 从NCBI下载SRA数据
  2. 《AutoCAD 2016中文版室内装潢设计从入门到精通》——2.3 设置绘图环境
  3. 计算机辅助设计三级试题,计算机辅助设计三级项目.doc
  4. access设计视图打不开_5、使用数据视图创建表(ACCESS图解操作系列)
  5. 迅为iTOP-3568开发板安装 RKNN Toolkit Lite2
  6. iOS开发-Apple开发者账号详解
  7. 深入浅出JBoss Seam
  8. SM2 (国密的一种算法)
  9. PotPlayer突然无法播放ISO文件
  10. hutool 自定义excel_使用Hutool Java工具类库 导出Excel 超级简单