015输入理解时间片

☆﹎夜﹎☆ ☆﹎夜﹎☆     2022-09-05     537

关键词:

线程
  ● 线程抢占式运行
    ○ 启动两个线程
      ○ 分别在第一个线程 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,然后根据提示输... 查看详情