欢迎来到天天文库
浏览记录
ID:33727639
大小:278.00 KB
页数:15页
时间:2019-02-28
《windows进程和线程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Windows进程和线程1进程1.1特点每个进程都有自己的ID号每个进程都有自己的地址空间,进程之间无法访问对方的地址。每个进程都有自己的安全属性。每个进程当中至少包含一个线程。1.2进程环境信息也称:进程上下文。1.2.1获取和释放环境信息获取GetEnvironmentStrings释放FreeEnvironmentStrings1.2.2获取和设置环境变量获取环境变量设置环境变量1.2.3进程的信息1进程IDGetCurrentProcessId2进程句柄GetCurrentProcess返回程序的伪句柄(-1),可以使用
2、该句柄访问该进程的所有操作。1.2.4进程的使用1创建进程WinExec-早期16位操作系统ShellExecute-Shell操作CreateProcess-目前最多使用2退出线程只能结束本进程参数没有实际意义能结束其他及自身线程退出码没有实际意义3通过进程ID获取进程句柄OpenProcess4关闭进程句柄CloseHandle作用:把进程的句柄置为-15进程间的等候WaitForSingleObject等候可等候的句柄的信号。阻塞函数,等候句柄的信号,只在句柄有信号或超出等候时间,才会结束等候。备注进程地址空间:底层驱动的
3、进程空间:4G,驱动可任意访问上层应用的地址空间2线程Windows线程是可以执行的代码的实例。系统是以线程为单位调度程序。一个程序当中可以有多个线程,实现多任务的处理。Windows线程的特点:1线程都具有一个ID2线程具有自己的安全属性3每个线程都具有自己的栈内存(默认1M)4每个线程都有自己的寄存器信息进程多任务和线程多任务:进程多任务是每个进程都使用私有地址空间,线程多任务是进程内的多个线程使用同一个地址空间线程的调度:将CPU的执行时间划分成时间片,依次根据时间片执行不同的线程。线程轮询:线程A->线程B->线程A..
4、....2.1线程的使用1定义线程处理函数2创建线程返回线程句柄,线程句柄是可等候句柄dwCreateionFlags方式只有两种:0,立即执行;CREATE_SUSPENDED,使用ResumeThread函数唤醒3结束线程ExitThread结束本线程TerminateThread结束制定线程4关闭线程句柄CloseHandle并不是关闭线程,而是关闭线程句柄.5线程的挂起和执行挂起SuspendThread执行ResumeThread6线程的信息GetCurrentThreadId-获取当前线程的IDGetCurrentT
5、hread-获取当前线程的句柄打开指定ID的线程,获取其句柄OpenThread2.2多线程的问题线程A->线程B->线程A。。。。。分析代码:创建线程函数线程处理函数现象分析:当线程A执行printf输出时,如果线程A的执行时间结束,系统会将线程A的相关信息(栈、寄存器)压栈保护,同时将线程B相关信息恢复,然后执行线程B,线程B继续输出字符。由于线程A正输出字符,线程B会继续输出,画面字符会产生混乱。2.3线程同步技术原子锁临界区(段)互斥事件信号量可等候定时器共六种线程同步技术,其中加锁的是:原子锁、临界区(段)、互斥;剩下
6、的三个不是加锁。总结:2.3.1等候函数WaitForSingleObject-等候单个WaitForMultipleObjects-等候多个可等候多个句柄,但是必须是可等候句柄bWaitAll-等候方式TRUE-表示所有句柄都有信号,才结束等候FASLE-表示句柄中只要有1个有信号,就结束等候。2.4原子锁例子:循环一亿次,最终结果,g_nValue不是两亿当线程A执行g_nValue1++时,如果线程切换时间正好是在线程A将值保存到g_nValue1之前,线程B继续执行g_nValue1++,那么当线程A再次被切换回来之后,
7、会将原来线程A保存的值保存到g_nValue1上,线程B进行的加法操作被覆盖。g_nValue1++的汇编码00401063movecx,dwordptr[g_nValue(00427c48)]00401069addecx,10040106Cmovdwordptr[g_nValue(00427c48)],ecx其伪代码如下:ecx=g_nValue;ecx=ecx+1;g_nValue=ecx;原子锁的使用原子锁–对单条指令的操作。InterlockedIncrementInterlockedDecrementInterlock
8、edCompareExchangeInterlockedExchange…原子锁实现:直接对数据所在的内存操作,并且在任何一个瞬间只能有一个线程访问。原子锁是加锁技术中效率最高的。2.5临界区原子锁能实现的操作,临界区完全可以实现;临界区能实现的,原子锁不一定能
此文档下载收益归作者所有