返回信息流#include <stdio.h>
#include <windows.h>
HANDLE hThread_1; //定义一个全局变量为线程1的句柄
DWORD WINAPI FirstThread(PVOID pParam); //线程函数1
DWORD WINAPI SecondThread(PVOID pParam); //线程函数2
int main()
{
DWORD dwFirstThreadId;
hThread_1 = CreateThread(NULL,
0,
FirstThread,
NULL,
0,
&dwFirstThreadId);
WaitForSingleObject(hThread_1,INFINITE); //等待线程1执行结束
return 1;
}
DWORD WINAPI FirstThread(PVOID pParam)
{
int x;
printf("Start:&x:%p\n",&x);
x=0;
DWORD dwSecondThreadId;
HANDLE hThread_2; //定义线程2句柄
hThread_2=CreateThread(NULL, //创建线程2
0,
SecondThread,
(PVOID)&x, //将线程1堆栈上的变量传给线程2
0,
& dwSecondThreadId);
CloseHandle(hThread_1); //在线程1中调用closehandle来释放线程1的资源,此时线程1的堆栈被破坏
WaitForSingleObject(hThread_2,INFINITE);
return 1;
}
DWORD WINAPI SecondThread(PVOID pParam)
{
*((int*)pParam)=5; //在线程2中访问线程一堆栈上的变量
printf("x:%d \n", *((int*)pParam));
return 1;
}
为什么我在函数FirstThread中已经用CloseHandl将线程1的堆栈破坏,为什么线程2还是可以访问线程1堆栈上的变量?而不会产生内存访问错误?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24990同步于 2008/4/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
一个多现成的问题,请教大牛
kangkai810
2008/4/19镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
我不知道该怎么理解CloseHandle书上和MSDN上都只是说他会释放内存
以上代码是我根据windows核心编程中讲的多线程写的,书上说这段代码会造成内存访问错误,但我试了却没有任何错误,不知道是为什么
closehandle只是减少了本可调度对象对handle值的一个引用计数。。。
只有全部的引用计数都为0时才会被os回收资源。。。closehandle本身不会清除资源的。。。
在线程1里减少对自己的引用计数不会对子线程和主线程有任何影响啊。。。
主线程的那个引用还是存在的啊。。。所以没有清空。。。
【 在 CNLAS 的大作中提到: 】
: closehandle只是减少了本可调度对象对handle值的一个引用计数。。。
: 只有全部的引用计数都为0时才会被os回收资源。。。closehandle本身不会清除资源的。。。
: 在线程1里减少对自己的引用计数不会对子线程和主线程有任何影响啊。。。
: ...................
re
【 在 CNLAS 的大作中提到: 】
: closehandle只是减少了本可调度对象对handle值的一个引用计数。。。
: 只有全部的引用计数都为0时才会被os回收资源。。。closehandle本身不会清除资源的。。。
: 在线程1里减少对自己的引用计数不会对子线程和主线程有任何影响啊。。。
: ...................
向您致敬!!!!!