多线程笔记1

本文详细阐述了进程与线程的区别,包括内存划分、资源分配、上下文切换和线程核心对象的理解,并通过实例说明了原子操作和线程同步的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章:为什么要千头万绪

1.合作型多任务与抢占型多任务的区别

2.进程、线程的区别

  进程 = 内存 + 资源

  内存划分:(1)code:程序的可执行部分。

                (2)data:程序中的所有变量(不包含局部变量),分为全局变量、静态变量。

                (3)stack:堆栈空间,其中有局部变量。

  资源划分:(1)核心对象

                (2)USER资源

                (3)GDI资源

  线程:任何时刻下的状态,被定义在进程的某块内存中,以及cpu寄存器上,其他重要数据存储在进程的共享内存中。

3.Context switch

  发生中断的时候,CPU 取得目前这个线程的当前状态,也就是把所有寄存器内容拷贝到堆栈之中,再把它从堆栈拷贝到一个CONTEXT 结构;

  要切换不同的线程,操作系统应先切换该线程所隶属之进程的内存,然后恢复该线程放在CONTEXT 结构中的寄存器值。

4.Race conditions

  链表插入实例。

5.Atomic operation

 

第二章:线程的第一次接触

1.CreateThread():

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,          //描述新线程security属性,NULL表示使用缺省值。
DWORD dwStackSize,                                             //新线程堆栈大小,0表示使用缺省大小:1MB
LPTHREAD_START_ROUTINE lpStartAddress,           // 新线程开始的起始地址,这是一个函数指针
LPVOID lpParameter,                                             //新线程函数参数
DWORD dwCreationFlags,                                      //允许产生一个暂时挂起的线程,默认立即执行。
LPDWORD lpThreadId                                           //新线程ID被传回这里
);

2.函数调用约定

  __stdcall, __cdecl, __thiscall, __fastcall, __nakedcall, __pascal

3.核心对象

  进程,线程,文件,事件,信号量,互斥器,管道

4.CloseHandle():

BOOL CloseHandle (
HANDLE hObject                                      //代表一个已打开对象handle
);

5.线程对象与线程的区别

  线程的handle 是指向“线程核心对象”,而不是指向线程本身;“线程核心对象”引用到的那个线程也会令核心对象开启。因此,线程对象的默认引用计数是2。

6.GetExitCodeThread():

BOOL GetExitCodeThread(
HANDLE hThread,                                     //线程handle
LPDWORD lpExitCode                               //指向一个DWORD,用以接收结束代码
);

GetExitCodeThread( )的一个糟糕行为是,当线程还在进行,尚未有所谓结束代码时,它会传回TRUE 表示成功。也就是说你不可能从其返回值中知道“到底是线程还在运行呢,还是它已结束,但返回值为STILL_ACTIVE。

7.ExitThread():

VOID ExitThread(
DWORD dwExitCode                                //dwExitCode 指定此线程之结束代码
);

 

转载于:https://www.cnblogs.com/programmer-wfq/p/4635286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值