b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

windows多线程编程_python的优点_windows多线程编程实例(3)

电脑杂谈  发布时间:2017-05-28 11:01:50  来源:网络整理

PDWORD pdwThreadID);

《Windows核心编程》P124介绍说应当使用编译器提供的线程创建函数,而不应当直接使用CreateThread。

3 .1CreateThread调用的内核行为

调用CreateThread后,OS进行如下几个动作:

l 生成一个线程内核对象

l 在进程空间内为线程分配堆栈空间

因为线程的环境同于其所在进程的环境,所以创建的线程可以访问进程中的所有资源,包括线程中所有的内核对象。

4 线程销亡

4 .1终止线程的方式:

l 线程函数返回(最好使用这个方式,可以保证:线程种创建的C对象正常析构;OS释放线程堆栈内存;OS将线程的退出码设置为线程函数的返回;系统将递减该线程内核对象的的使用计数器【如果此时还有其他引用……,见下面说明】。)

l 调用ExitThread(不能释放C对象,所以最好不要使用这个方式。另外,如果非要调用也应当调用编译器推荐的,如_endThread【Windows核心编程P127】)

l 同进程内的其他线程(包括主线程)调用TerminateThread(被撤销线程得不到通知,不能释放资源,尽量避免这种方式。另外这个函数是个异步函数,返回时,线程不保证已经被撤销,如果要观察线程是否被撤销,应当使用WaitForSingleObject)

l 包含线程的进程终止(应当避免这种方式)

4 .2线程退出时OS的行为

l 线程内的所有用户对象被释放。

l 线程的退出码从STILL_ACTIVE改为传递给ExitThread或TerminateThread的代码

l 线程内核对象的状态改为“已通知”

l 如果线程为进程中的最后一个线程,则OS将进程当作已终止运行

l 线程内核对象的引用计数器减1(一旦线程终止了,其他引用改线程内核对象将不能够处理改线程的句柄,但是可以通过调用GetExitcodeThread来检查hThread代表的线程是否已经终止运行了。)

5 线程同步

5 .1线程同步的起因以及解决之道

5 .1.1共用资源型:

多个线程需要访问同一个资源的时候,为了保证资源不被破坏,需要线程对资源的访问具有原子性。

5 .1.2依赖型:

一个线程等待另外一个线程某件事情完成后才能执行_可以通过手动事件的方式互相通知。

5 .2线程同步种类细分同步起因

同步种类

同步方法备注

共用资源

多个线程对共用变量做加减操作

互锁函数族之:InterlockedExchangeAdd

共用资源

多个线程对公共变量、指针做赋操作

互锁函数族之:InterlockedExchange ,InterlockedExchangepoint

共用资源

多个线程需要根据对公共变量、指针的判断做操作选择

互锁函数族之:InterlockedCompareExchange

InterlockedCompareExchangePointer

共用资源

复杂数据结构(非单),不适合互锁函数族处理的

用“关键代码”的方式,关键代码中要注意:1、要尽量的快速处理完,以防止其他等待线程等待太长时间 2、线程等待过程中由用户模式切换到内核模式,耗费1000个CPU周期,时间比较长。windows多线程编程3、只能对单个进程中的线程进行同步)

InitializeCriticalSection;

EnterCriticalSection;

LeaveCriticalSection;

DeleteCriticalSection;


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49702-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...