• 线程池:


    线程池构思:

      初始化线程池时,创建指定数量的线程,并将其全部放入空闲线程堆中。当添加任务时,判断是否有空闲线程,若有,则弹出一个空线程执行该任务,并将该线程添加到正在执行的线程列表中;若没有空闲线程则将任务添加到任务队列中。待任务执行完后,标记该任务状态为已完成,再查看任务队列中是否仍有任务,若有则弹出一个新任务,并将其附加到该线程中继续执行,若没有新任务,则将该线程从正在执行的线程列表中移除并放入空闲线程堆。执行完的任务立即删除或创建任务者后续删除。暂停的时候,将正在执行的线程列表中的所有线程暂停。销毁线程池时,将正在执行的线程列表和空闲线程集内的所有线程销毁。(也可以将正在执行的线程列表和空闲线程堆合并为一个线程集,给线程标记空闲或执行中)

      具体类如下:

       CMyMutex类: 引入windows.h下的CRITICAL_SECTION(临界区),然后初始化临界区、进入临界区、离开临界区。

       CMyTask类:执行具体任务、获取ID、退出、获取状态等。(临界区保证资源独占)

       CMyQueue类:关联CMyMutex类和CMyTask类;包括弹出任务、前or后端添加任务、获取任务数、判断任务是否为空、清空任务等。(队列管理任务,不负责任务的创建、销毁)

       CMyThread类:前置声明类:CTask、 CBaseThreadPool,包含启动线程、暂停线程、恢复线程、附加任务、开始任务、是否退出等,友类CMyThreadPool。  

        创建一个线程:m_hThread=CreateThread(0,0,threadProc,this,0,&m_threadID);  

        关闭该线程:CloseHandle(m_hThread);  执行完任务后,将该线程设置为空线程。(线程创建后的暂停、恢复,通过设置事件、等待信号量来完成)    

       CMyList类:前置线程类,添加、移除、清空,计算数量、判断是否为空等(临界区保证资源独占)

       CMyStack类:堆栈从开头推入、弹出线程,清空线程、计算数量、判断是否为空等(临界区保证资源独占)

       CBaseThreadPool类:分配活动线程的抽象类。

       CMyThreadPool类:线程池类继承CBaseThreadPool,实现分发线程。

  • 相关阅读:
    (OK) VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题
    (OK) install-fedora23—gnome classic—dnf—gdm—multi-user—graphical
    (OK) fedora23——add “opening terminal” in the menu of right click
    (OK) Install Docker on Fedora 23
    (OK) 运行cBPM in Fedora23
    错误:‘bOS::SQL::SQLCommand::SQLOperation’既不是类也不是命名空间
    My enum is not a class or namespace
    【t049】&&【u001】足球
    【u002】数列排序(seqsort)
    【u003】计算概率
  • 原文地址:https://www.cnblogs.com/shenchao/p/4737350.html
Copyright © 2020-2023  润新知