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出来的对象以及全局变量,这些需要同步。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!