线程:线程有时候被称为轻量级进程
为什么使用多线程而不用多进程
①进程资源>线程资源
创建一个虚拟的地址空间需要大量系统资源,占用内存大
②
③
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 手动
技术推进会心得,有待补充……