博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程笔记1
阅读量:4937 次
发布时间:2019-06-11

本文共 1417 字,大约阅读时间需要 4 分钟。

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

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

你可能感兴趣的文章
hive的count(distinct id)测试--慎用
查看>>
第九周周总结
查看>>
Logistic Regression
查看>>
8lession-基础类型转化
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>
数据交互 axios 的使用
查看>>
bootloader,kernel,initrc
查看>>
Java中jshell脚本
查看>>
performSelector的方法
查看>>
redis
查看>>
BZOJ1645 [Usaco2007 Open]City Horizon 城市地平线
查看>>
配置IIS
查看>>
单例模式详解
查看>>
电商项目(下)
查看>>
[NOIP2015] 子串
查看>>