zoukankan      html  css  js  c++  java
  • 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
    "),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
    "),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
    "),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
    "),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
    "), 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	"),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	"),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	
    "), i);
    56         g_Thread_Sign = NO1;
    57     }
    58 
    59     WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
    60     return 0;
    61 }

  • 相关阅读:
    《JAVA设计模式》之责任链模式(Chain of Responsibility)
    《JAVA设计模式》之迭代器模式(Iterator)
    《JAVA设计模式》之观察者模式(Observer)
    【python】effective python读书笔记
    【python】contextlib的使用
    【linux】乱七八糟命令
    【深度学习】使用Ray
    【深度学习】超参调节方式:Bayesian Opt
    【linux】scp不需要输入密码的方法
    【深度学习】论文TCN
  • 原文地址:https://www.cnblogs.com/sdk123/p/7043427.html
Copyright © 2011-2022 走看看