windows关于线程进程的一些函数和笔记

程序编译过程

1.预处理
解析 #ifdef #ifndef
解析 #include 将文件加载到当前位置
解析 #define
删除所有注释
对文件进行序号标识
保留# pramga

2.编译
对于处理后的文件,进行语义分析,词义分析
,编译优化,代码生成为汇编代码

3.汇编
讲汇编代码转换为机器码语言文件
 

4.链接

将二进制文件加载为.exe装入内存中

进程分配的空间

操作系统32位    进程32位               4gb虚拟地址空间 2^32
              64位    进程64位/32位      16tb/4gb

   虚拟空间是最大空间 

32位分为三种模式

内核模式    所有进程共享
用户模式    进程的私有地址
空指针模式   调试程序使用

 

64位分为两种模式

内核模式
用户模式

关于cpu上线程执行方式

基于轮换时间片  , 一个人执行一会儿 (20ns)


并发 : 多个执行命令交替的执行   在一个cpu上


并行 : 多个执行命令同时在执行  在多个cpu上

线程与进程的关系

进程是分配空间的基本单位
线程是轮换时间片的基本单位
线程是进程中的基本单元
一个进程至少一个线程
线程隶属于进程一部分

线程组成部分

1.线程栈用来储存线程所需要的局部的临时资源
2.内核对象,计数器2次,挂起计数器,信号


用户空间是进程独有的
内核空间是所有进程共有的

线程种类
用户线程,内核线程
按照  1:1   n:1    n:m    

线程提高效率通常通过提高工作密度

线程基本状态  (主要有三个)

1.获得cpu时间片
2.等待某个事件发生
3.等待io操作发生
4.时间用完了
5.x6.x


调用约定
参数由右往左,自身清除

printf(); ——edcil支持可变参数

线程栈是私有的,堆是共有的


多线程并发的问题

线程同步:原子访问,同一时刻只允许一个线程访问共享资源(变量)
  volatile 防止编译优化,直接操作内存

一.临界区(关键段) 同一时间只允许一个线程访问代码段

1.结构体的定义 CRITICAL_SECTION m_cs;

2.临界区的初始化 InitializeCriticalSection(&m_cs);

3.临界区的销毁 DeleteCriticalSection(&m_cs);

4.实现临界区 1)EnterCriticalSection(&cs);

                       2) LeaveCriticalSection(&m_cs);

临界区类似一个小房间,一个人进去了就锁上了


1)直接阻塞

2)旋转锁(等一会再阻塞) InitializeCriticalSectionAndSpinCount函数

3)非阻塞

二.内核对象  

3.互斥量 初始拥有权
         

4.事件   人工状态
 

5.信号量  指定数量

不同点:1.适用范围
             2.灵活性
             3.安全性 内核对象更安全
4.效率  临界区效率更高

减少锁的力度可以提高效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值