125096 2015-06-04 14:23 采纳率: 0%
浏览 1303

函数多线安全性问题,大家帮我看看

#include
#include
DWORD WINAPI ThreadProc( LPVOID lpParameter);

int main (void)
{
for (BYTE i=0;i<5;i++)
{
DWORD IDThread=0;
HANDLE hThread=CreateThread(NULL,NULL,ThreadProc,(LPVOID)i,NULL,&IDThread);
if (hThread)
CloseHandle(hThread);
}
getchar();
return 0;
}
DWORD WINAPI ThreadProc( LPVOID lpParameter)
{
for (BYTE i=0;i<10;i++)
{
printf("%d---%d---%d---%d\n",lpParameter,lpParameter,lpParameter,lpParameter);
Sleep(1);
}

return true;

}
/*
CPU一次执行一行代码,在main函数中创建了4个线程,调用同一个函数。
在4个线程同时执行的时候,发生CPU时间片切换,在ThreadProc函数中执行的代码可能不一样
我的意思是线程1中的局部变量被改写,不会影响线程2中的局部变量。
那4个线程同时执行一个函数,那这个函数被拷贝到每个线程的内部去执行了?咋感觉理解起来很抽象

*/

  • 写回答

5条回答

  • threenewbee 2015-06-04 14:29
    关注

    函数不存在拷贝不拷贝的。
    好比你电脑上同时运行2个word,并不需要拷贝2份代码。
    每个程序之所以独立运行,只要它们的数据是独立的就可以。
    具体来说,程序的数据分为寄存器、堆栈、堆、静态存储(只读,可以无视)几个部分
    多进程程序,每个程序有自己的寄存器、堆栈、堆,所以完全独立
    同一个程序的多线程,只有寄存器和堆栈是独立的,堆是共享的,也就是那些new出来的对象以及全局变量,这些需要同步。

    评论

报告相同问题?

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致