关键词:
线程
● 线程抢占式运行
○ 启动两个线程
○ 分别在第一个线程 1 - 100
○ 第二个线程里面 101-200
○ 未知
○ 有一定规律的,哪个线程先抢到时间片,就先执行里面的所有代码
○ 谁先抢到时间片 就先运行谁的代码
1 #include <windows.h> 2 #include <stdio.h> 3 #include <tchar.h> 4 5 DWORD WINAPI ThreadFuncNo1(LPVOID lParama) 6 { 7 for(int i = 1; i <= 100; ++i) 8 { 9 _tprintf(TEXT("No1:%d\r\n"),i); 10 } 11 return 0; 12 } 13 14 DWORD WINAPI ThreadFuncNo2(LPVOID lParama) 15 { 16 for(int i = 101; i <= 200; ++i) 17 { 18 _tprintf(TEXT("No2:%d\r\n"),i); 19 } 20 return 0; 21 } 22 int main() 23 { 24 HANDLE hThread[2]; 25 hThread[0] = CreateThread(nullptr, 0, ThreadFuncNo1, nullptr, 0, nullptr); 26 hThread[1] = CreateThread(nullptr, 0, ThreadFuncNo2, nullptr, 0, nullptr); 27 WaitForMultipleObjects(2, hThread, TRUE, INFINITE); 28 return 0; 29 }
● 主线程是否也会抢占CPU时间片运行呢 ?
○ 下面是实力代码
1 #include <windows.h> 2 #include <stdio.h> 3 #include <tchar.h> 4 5 DWORD WINAPI ThreadFuncNo1(LPVOID lParama) 6 { 7 for(int i = 1; i <= 100; ++i) 8 { 9 _tprintf(TEXT("No1:%d\r\n"),i); 10 } 11 return 0; 12 } 13 14 DWORD WINAPI ThreadFuncNo2(LPVOID lParama) 15 { 16 for(int i = 101; i <= 200; ++i) 17 { 18 _tprintf(TEXT("No2:%d\r\n"),i); 19 } 20 return 0; 21 } 22 int main() 23 { 24 HANDLE hThread[2]; 25 hThread[0] = CreateThread(nullptr, 0, ThreadFuncNo1, nullptr, 0, nullptr); 26 hThread[1] = CreateThread(nullptr, 0, ThreadFuncNo2, nullptr, 0, nullptr); 27 WaitForMultipleObjects(2, hThread, TRUE, INFINITE); 28 29 //主线程是不是也会抢占CPU时间片运行呢? 30 for (int i = 201; i <= 300; ++i) 31 { 32 _tprintf(TEXT("No3:%d\r\n"), i); 33 } 34 35 36 return 0; 37 }
● 时间片
○ 目前无法控制时间片
○ 时间片是由操作系统来管理的
● 如何让程序交叉执行
○ 当线程中发生阻塞的时候 ,会使得当前我们的线程休眠
○ 操作系统会讲它休眠的时间片提取出来,回去执行其他线程
○ 通过阻塞函数实现
● 简单切换执行代码
1 #include <windows.h> 2 #include <stdio.h> 3 #include <tchar.h> 4 5 enum ThreadSigln 6 { 7 NO1, 8 NO2, 9 NO3 10 }; 11 ThreadSigln g_Thread_Sign; 12 13 DWORD WINAPI ThreadFuncNo1(LPVOID lParama) 14 { 15 for(int i = 1; i <= 100; ++i) 16 { 17 while(g_Thread_Sign != NO1) 18 { 19 Sleep(1); 20 } 21 _tprintf(TEXT("No1:%d\t"),i); 22 g_Thread_Sign = NO2; 23 } 24 return 0; 25 } 26 27 DWORD WINAPI ThreadFuncNo2(LPVOID lParama) 28 { 29 for(int i = 101; i <= 200; ++i) 30 { 31 while(g_Thread_Sign != NO2) 32 { 33 Sleep(1); 34 } 35 _tprintf(TEXT("No2:%d\t"),i); 36 g_Thread_Sign = NO3; 37 } 38 return 0; 39 } 40 int main() 41 { 42 HANDLE hThread[2]; 43 hThread[0] = CreateThread(nullptr, 0, ThreadFuncNo1, nullptr, 0, nullptr); 44 hThread[1] = CreateThread(nullptr, 0, ThreadFuncNo2, nullptr, 0, nullptr); 45 //WaitForMultipleObjects(2, hThread, TRUE, INFINITE); 46 g_Thread_Sign = NO1; 47 48 //主线程是不是也会抢占CPU时间片运行呢? 49 for (int i = 201; i <= 300; ++i) 50 { 51 while(g_Thread_Sign != NO3) 52 { 53 Sleep(1); 54 } 55 _tprintf(TEXT("No3:%d\t\r\n"), i); 56 g_Thread_Sign = NO1; 57 } 58 59 WaitForMultipleObjects(2, hThread, TRUE, INFINITE); 60 return 0; 61 }
多线程时间片问题
...就是引入时间片,每个程序轮流执行。举个例子:你同时输入两篇文档:A.txt和B.txt;你在A中输入一个字之后,再在B中输入一个字,轮流输入,直至完成。总的看来你似乎在同时进行两篇文章的录入,你可以说我一边写A一边写B... 查看详情
l2-015.互评成绩(代码片段)
...最后成绩。本题就要求你编写这个互评系统的算分模块。输入格式:输入第一行给出3个正整数N(3<N<=104,学生总数)、k( 查看详情
任务调度—抢占式,时间片和合作式
...adX操作系统的核心了。对于初学者来说,要一下子就能够理解这些比较困难,需要多花些时间把这些基本概念搞清楚,然后阅读下源码,深入理解实现方法。13.1关于合作式调度器的 查看详情
freertos——任务调度—抢占式,时间片和合作式
...TOS操作系统的核心了。对于初学者来说,要一下子就能够理解这些比较困难,需要多花些时间把这些基本概念搞清楚,然后阅读下源码,深入理解实现方法。关于合作式调度器的特别说明 FreeRTOS支持的调度方式FreeRTOS操... 查看详情
l1-015.跟奥巴马一起画方块
...代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:输入在一行中 查看详情
015---django的forms组件(代码片段)
...中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的... 查看详情
java编程:thread.yield()的理解(代码片段)
yield作用yield使当前线程让出CPU时间片,线程从运行状态(Running)变为可执行状态(Runnable),处于可执行状态的线程有可能会再次获取到时间片继续执行,也有可能处于等待状态,直到再次获取到... 查看详情
java千百问_01基本概念(015)_阻塞非阻塞有什么区别
...程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运 查看详情
操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)(代码片段)
实验二进程调度一、 实验目的1. 理解进程运行的并发性。 2. 理解处理器的三级调度。3. 掌握先来先服务的进程调度算法。4. 掌握短进程优先的进程调度算法。5. 掌握时间片轮转... 查看详情
时间片轮转算法和优先级调度算法模拟实现(代码片段)
...片轮转调度算法3.按要求输出结果。二、实验目的1.加深理解有关进程控制块、进程队列等概念。2.体会和了解优先级调度算法和时 查看详情
l2-015.互评成绩(代码片段)
...最后成绩。本题就要求你编写这个互评系统的算分模块。输入格式:输入第一行给出3个正整数N(3<N<=104,学生总数)、k(3<=k<=10,每份作业的评审数)、M(<=20,需要输出的学生数)。随后N行,每行给出一份作业 查看详情
关于sleep的理解
unix是按时间片轮转调度,windows是抢占式调度以吃蛋糕为例子,10个人吃蛋糕,如果是unix下,假设开始时,每个人都处于就绪状态,那么操作系统调度大家排好队,按顺序吃,每个人吃1分钟,1分钟就是操作系统给大家分配的时... 查看详情
时间片轮调的单片机程序结构
...,基本可以解决大部分的设计要求了。而且这种结构便于理解,而且程序易构成模块化,在各个模块中调用实现更复杂的任务。然而顺序结构的写法,有时候避免不了沉重冗长的时间等待。例如键盘扫描,你就给我弄了一个delay_... 查看详情
线程基础的一些理解(代码片段)
一、线程的调度与控制 通常计算机只有一个CPU,CPU在某一个时刻只能执行一条命令,线程只有得到CPU时间片,也就是使用权,才可以执行命令。在单核CPU的机器上,线程并不是并行运行的。java虚拟机主要负责线程调度,取... 查看详情
时间片轮转算法和优先级调度算法c语言模拟实现
...本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法的具体实施办法。二、实验内容1.设计进程控制块PCB的结构,通常应包括如下信息:进... 查看详情
日期作为 Webi 报告的输入参数
】日期作为Webi报告的输入参数【英文标题】:DateasaninputparametertoWebireport【发布时间】:2012-11-2600:22:33【问题描述】:我正在尝试从提示中创建一个仅包含一个输入日期的WebI报告,然后在它之后获取n个时间片、几周或几个月(... 查看详情
队列的典型实例问题——cpu时间片轮转调度(代码片段)
1//eg输入51002//p11503//p2804//p32005//p43506//p5207#include<iostream>8#include<string>9#include<queue>10usingnamespacestd;11intmain()12intn;//任务数13inttime;//时间片14cin>>n;15cin&g 查看详情
求助,linux下intelmkl的安装
....b)#cdl_fc_p_10.1.015#./install.shc)选择1,进入安装,然后有输入序列号的选择,如果直接输入序列号,就选1(推荐使用),然后输入序列号,如果不能上网,或网络认证太慢,可以提供licence文件的路径的话,选2,然后根据提示输... 查看详情