《VC++深入详解》学习笔记 第十五章 多线程
(一天两更,肝?)
进程和程序: 进程是程序的对象
进程组成: 内核对象:系统管理进程的地方
地址空间:包含DLL和代码数据,进程本身不执行什么,代码的执行是线程,在进程构造的环境中。每个进程可以包含多线程,系统在进程中创建的
第一个线程称之为主线程。
进程地址空间: 对应32位系统而言,一个进程有4GB的虚拟地址空间,其中2GB为内核分区,剩余2GB中一部分作为NULL指针分区,该分区负责维护进程大部分数据
线程的组成: 内核对象:系统管理线程地方
线程栈:维护线程执行中函数参数和局部变量
线程的创建: 系统创建线程内核对象(该对象不是线程本身,而是管理线程的较小的数据结构)>进程的地址空间中分配内存供线程栈使用>新线程能够轻易的访问进程内核对象,进程内存和该进程中其他线程的堆栈
线程只有一个内核对象和一个栈,保留信息和需要内存少,线程的开销缘由小于进程,所有尽量采用多线程编程少创建进程。
多线程运行方式: 时间片划分,给每个线程分配一定时间,循环执行
创建线程:
HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, //线程初始栈大小 LPTHREAD_START_ROUTINE lpStartAddress, //新线程起始地址 LPVOID lpParameter, //传递参数 DWORD dwCreationFlags, //线程创建标记 LPDWORD lpThreadId //线程接收ID );
互斥对象(mutex): 同时只有一个线程能够访问该对象,被访问时,对象处于未通知状态;未访问时,对象处于通知状态;
创建互斥对象:CreateMutex(安全性,创建者是否访问,对象名)返回值为对象句柄
GetLastError:对象曾创建,返回ERROR_ALREADY_EXISTS
释放对象所有权:ReleaseMutex(句柄)
获取对象所有权:WaitForSingleObject(句柄,等待时间(毫秒))返回值:对象有信号,等待超时无信号,对象所有者线程已结束,抢占所有权。
应用程序只有一个实例: 通过在创建互斥对象识别是否曾创建来确定该对象是否的第二个对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具