读书人

十月 关于线程思考

发布时间: 2012-10-19 16:53:36 作者: rapoo

10月 关于线程思考-

.1线程可以从固定地址启动吗?

//在项目中遇到线程中有内存泄露,但是每次泄露地址不一样,如果线程能够固定地址,
估计会对抓住memory leak有很大帮助。

我试着CreateThread没有找到对应的参数,未果
http://baike.baidu.com/view/1191444.htm#3

2. 主线程返回,子线程依旧执行,这种情形存在吗?

当前,我认为,存在,只有所有的线程退出,进程才消亡。
但是,我又想,主线程退出,会释放相应的资源,子线程如果访问主线程
申请的资源,那就不行了。
所以,就提出这个问题。


3.一个线程申请了动态内存,然后进入轮询。这种粗暴的设计会带来内存泄露,
怎么解决啦?
a用terminateProcess or exitProcess不行
b.我想,可以考虑线程通信.
进程一旦退出,在主线程的退出函数,发送一个信号(semaphore)给轮询的线程,
轮询线程收到后,就做对应的清理操作


[解决办法]
将模块都设计成“线程安全”的,就不会有问题
现在的电脑程序,哪怕是手机上的,都要多线程的支持,这是必须的

你的程序通常不可能直接控制物理内存,都是运行在虚模式下,通常你只能破坏自己,当主程序退出,最多给OS带来毫秒级的纠结,必须是绛紫的:)
[解决办法]
1.线程可以从固定地址启动吗?
可以,只要你的程序或者DLL设置成固定基质就可以,启动函数肯定是同一个地址。但是这并不会为你内存泄露问题带来帮助,因为大部分内存泄露都是使用new没有delete造成的
如果你检查你的代码没有发现泄露的地方,请检查try catch模块抓到的异常class有没有释放。

2. 不知道,我都是在主线程里面做调度工作,所以主线程一直处于wait状态

3.这个使用event就可以了。
[解决办法]
如果主线程是异常退出的话,进程可能就不会结束,其它线程就可能还在运行。比如在主线程中调用ExitThread();
[解决办法]
1.WINDOWS中的内存地址不都是虚拟映射的嘛,看到的只不过是个假的地址啊,就算一样,真正的物理地址也可能不一样。这需要要个非常优秀的管理员来分配。不能让用户乱来。
我认为不可以的,如果高手可以,请告知方法。

2.线程如果崩溃的话,会影响到主进程一起退出。但是主进程如果退出了。子线程一起玩完。
另外,楼主你说的 主线程和父线程,主进程应该不是一个概念吧?

3.进程一旦退出了,之前所有申请的内存,全部返还操作系统。
你如果要担心资源问题,只有服务器程序,就是进程永不推出才需要担心这个问题。
类似这种问题,指针都是全局的,然后操作起来用内核对象CEvent,CMutex,Semaphore来控制就行

读书人网 >VC/MFC

热点推荐