线程和线程同步

线程:线程有时候被称为轻量级进程

为什么使用多线程而不用多进程
①进程资源>线程资源
创建一个虚拟的地址空间需要大量系统资源,占用内存大

VC++

创建线程
_beginthreadex:线程中使用CRT,不使用MFC,初始化CRT后,调用CreateThread
终止线程
线程函数返回,线程函数return后,会清理函数内申请的类对象,即调用这些的析构函数

用户模式线程同步

(线程同步是按照顺序执行而不是同时执行)
原子访问
两个线程,A线程,B线程
①正常进行
②中断后在执行=》解决方案:将A线程interlockExchangeAdd(&g_x,1),结束访问interlockExchange()
旋转锁
(建议到四千万次就不要继续)

  void Func1()
       {
       while(InterlockExchange(&g_fRe,TRUE)=TRUE)
       sleep(0)
       //访问
       ......
       //结束访问
       InterlockExchange(&g_fRe,FALSE)
       }  

关键段
当不能使用interlock时可考虑关键段
临界区,一段代码加锁

 EnterCriticalSection(&g_cs);
   ......
 LeaveCriticalSection(&g_cs);

内核对象线程同步

手动事件触发,所有线程变为可调度
自动事件触发,一个线程(CPU分配,内核控制)变为可调度,其他继续等待

等待函数
WaitForSingleObject()
WaitForMultipleObject()
互斥量:一个
信号量:用来确保多个线程对一个或多资源的访问

C#

1.lock类似关键段
Monitor=lock
2.AutoResetEvent 自动
ManualResetEvent 手动

技术推进会心得,有待补充……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值