Linux多线程学习(七)sched_yield
sched_yield()这个函数可以使用另一个级别等于或高于当前线程的线程先运行。如果没有符合条件的线程,那么这个函数将会立刻返回然后继续执行当前线程的程序。
在成功完成之后返回零,否则返回-1.
看下面一个实例
#define _MULTI_THREADED #include <pthread.h> #include <stdio.h> #include <errno.h>#define LOOPCONSTANT 1000 #define THREADS 3pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int i,j,k,l;
static void checkResults(char *string, int rc) {if (rc) {printf("Error on : %s, rc=%d",string, rc);exit(EXIT_FAILURE);}return; }
void *threadfunc(void *parm){ int loop = 0; int localProcessingCompleted = 0; int numberOfLocalProcessingBursts = 0; int processingCompletedThisBurst = 0; int rc; printf("Entered secondary thread\n"); for (loop=0; loop<LOOPCONSTANT; ++loop) { rc = pthread_mutex_lock(&mutex); checkResults("pthread_mutex_lock()\n", rc); /* Perform some not so important processing */ i++, j++, k++, l++; rc = pthread_mutex_unlock(&mutex); checkResults("pthread_mutex_unlock()\n", rc); /* This work is not too important. Also, we just released a lock and would like to ensure that other threads get a chance in a more co-operative manner. This is an admittedly contrived example with no real purpose for doing the sched_yield(). */ sched_yield(); } printf("Finished secondary thread\n"); return NULL;}int main(int argc, char **argv){ pthread_t threadid[THREADS]; int rc=0; int loop=0; printf("Enter Testcase - %s\n", argv[0]); rc = pthread_mutex_lock(&mutex); checkResults("pthread_mutex_lock()\n", rc); printf("Creating %d threads\n", THREADS); for (loop=0; loop<THREADS; ++loop) { rc = pthread_create(&threadid[loop], NULL, threadfunc, NULL); checkResults("pthread_create()\n", rc); } sleep(1); rc = pthread_mutex_unlock(&mutex); checkResults("pthread_mutex_unlock()\n", rc); printf("Wait for results\n"); for (loop=0; loop<THREADS; ++loop) { rc = pthread_join(threadid[loop], NULL); checkResults("pthread_join()\n", rc); } pthread_mutex_destroy(&mutex); printf("Main completed\n"); return 0;}
编译 gcc -o sched_yield -lphread sched_yield.c
运行结果 Enter Testcase - ./sched_yield
Creating 3 threads Entered secondary thread Entered secondary thread Entered secondary thread Wait for results Finished secondary thread Finished secondary thread Finished secondary thread Main completed
Linux多线程学习(七)sched_yield相关推荐
- concurrentarraylist_java多线程学习七::::并发下ArrayList和HashMap
本程序中的java环境是jdk1.8,之前的javajava多线程学习一到六的环境也是jdk1.8 程序中的幽灵:隐蔽的错误 package rs.thread.day0504; /** * @aut ...
- linux多线程学习(七)——实现“生产者和消费者”
在上一篇文章中,利用信号量实现了线程间的互斥,这一篇将要利用信号量的互斥同步机制来实现一个经典实例,就是"生产者和消费者". 1.简单描述生产者和消费者的问题. 有一个缓冲区和两个 ...
- Linux多线程学习 - sched_yield() CPU让权
FROM: https://blog.csdn.net/xiaoyeyopulei/article/details/7965533 sched_yield()这个函数可以使 另一个级别等于或高于当前线 ...
- linux多线程学习(六)——信号量实现同步
在上一篇文章中已经用信号量来实现线程间的互斥,达到了互斥锁的效果,今天这篇文章将讲述怎样用信号量去实现同步. 信号量的互斥同步都是通过PV原语来操作的,我们可以通过注册两个信号量,让它们在互斥的问题上 ...
- linux多线程学习(二)——线程的创建和退出
在上一篇文章中对线程进行了简单的概述,它在系统中和编程的应用中,扮演的角色是不言而喻的.学习它.掌握它.吃透它是作为一个程序员的必须作为.在接下来的讲述中,所有线程的操作都是用户级的操作.在LINUX ...
- Linux基础学习七:mysql的安装和配置教程
MySQL的安装 yum安装 下载并安装MySQL5.7的yum源 [root@localhost ~]# wget -P /tmp https://dev.mysql.com/get/mysql57 ...
- linux多线程学习(五)——信号量线程控制
在上一篇文章中,讲述了线程中互斥锁的使用,达到对共享资源互斥使用.除了使用互斥锁,信号量,也就是操作系统中所提到的PV原语,能达到互斥和同步的效果,这就是今天我们所要讲述的信号量线程控制. PV原语是 ...
- linux多线程学习(三)——线程属性设置
在上一篇文章中,介绍了线程的创建和退出,以及相关函数的使用.其中pthread_create函数的第二个参数,是关于线程属性的设置,这也是今天所有讲述的.这些属性主要包括邦定属性.分离属性.堆栈地址. ...
- linux多线程学习(一)
进程是系统中程序执行和资源分配的基本单位.每个进程都有自己的数据段,代码段和堆栈段,这就导致了进程在进行切换等操作起到了现场保护作用.但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销 ...
最新文章
- Tomcat7 配置 ssl
- Kernel tasklet
- Linux-(C/C++)动态链接库生成以及使用(libxxx.so)
- /* program p5_04_AC 《聪明人的游戏提高篇》 1307:【例1.3】高精度乘法
- 近期计算机视觉算法竞赛汇总—总奖池超300万人民币
- win定时关机_如何让电脑定时自动关机
- hdu 3123(GCC)数论
- Linux风雨20年回顾 道路是沧桑
- matlab关于向量的基本操作
- [转] 虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
- 《我的祖国》正确英译应该是《The Evercountry, Mine》
- 数据中心机房搬迁施工技术方案
- caml library
- 粒子群课设_粒子群算法(人工智能结课论文)
- android终端模拟器运行命令可以进行adb connect
- 互联网家谱受到追捧,传统修谱方式面临淘汰,数字家谱:好用
- Excel功能及实现
- Linux--pthread_once 的用法
- oracle收集snop,SNAP收集服务器信息
- Android——自建CA证书,实现https请求