015 输入理解时间片
Posted ☆﹎夜﹎☆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了015 输入理解时间片相关的知识,希望对你有一定的参考价值。
线程
● 线程抢占式运行
○ 启动两个线程
○ 分别在第一个线程 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 }
以上是关于015 输入理解时间片的主要内容,如果未能解决你的问题,请参考以下文章