《TCP/IP网络编程》第19章

      最后更新:2022-01-14 20:54:01 手机定位技术交流文章

      《TCP/IP网络编程》第19章

      • 内核对象(Kernel Objects)
        • 定义
        • 内核对象归操作系统所有
      • Windows线程创建
        • 进程与线程
        • 创建线程
        • 创建线程安全函数
      • 内核对象的2种状态
        • 内核对象状态及状态查看
        • WaitForSingleObject & WaitForMultipleObjects

      内核对象(Kernel Objects)

      定义

      Windows操作系统创建并管理的资源(Resouce),进程、线程、文件、信号量、互斥量等。

      不同资源管理方式有差异。

      • 文件管理,注册并更新文件相关的数据I/O
        位置、文件的打开模式(read or write)等。
      • 线程管理,注册并维护线程ID、线程所属进程等信息。

      操作系统为了以记录相关信息的方式管理各种资源,在其内部生成数据块(结构体变量,内核对象)。

      内核对象归操作系统所有

      内核对象的创建、管理、销毁时机的决定等工作均由操作系统完成。

      Windows线程创建

      进程与线程

      非显示创建线程的程序,单一线程模型的应用程序。
      显示创建单独线程的程序,多线程模型的应用程序。
      main函数的运行基于线程完成,进程是装有线程的篮子,实际的运行主体是线程。

      创建线程

      区分内核对象的整数型句柄(HANDLE),类似于Linux的文件描述符。

      Windows线程在main函数返回时销毁。

      创建线程安全函数

      thread1_win.c

      线程属于操作系统管理资源,伴随内核对象的创建,为了引用内核对象而返回句柄。

      句柄区分内核对象,内核对象区分线程,线程句柄区分线程。

      句柄的整数值在不同进程中可能重复,线程ID在跨进程范围内不会重复。

      线程ID区分操作系统创建的所有线程。

      内核对象的2种状态

      应用程序实现过程中需要特别关注的信息被赋予某种“状态”。线程终止状态又称signaled状态,未终止状态称为non-signaled状态。

      内核对象状态及状态查看

      进程或线程的内核对象初始状态是non-signaled状态,终止时是signaled状态。

      通过boolean变量表示,初始值为FALSE(non-signaled状态),终止时TRUE(signaled状态)。

      WaitForSingleObject & WaitForMultipleObjects

      该函数发生事件(变为signaled状态)返回时,有时会把相应对象再次改为non-signaled状态。

      可以再次进入non-signaled状态的内核对象称为“auto-reset模式”的内核对象,不会自动跳转到non-signaled状态的内核对象称为“manual-reset模式”的内核对象。

      thread2_win.c

      thread3_win.c

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/16503.html

          热门文章

          文章分类