简介
本文描述的问题的多个线程调用 C 运行时"atexit"函数同时在 Windows 嵌入式紧凑型 7 时发生 n 异常。更新程序可以解决此问题。在安装此更新之前,必须安装此产品以前发出的所有更新。
症状
当多个线程在同一时间在 Windows 嵌入式紧凑型 7 调用 C 运行时atexit函数时,可能会出现异常。当调用的atexit函数的代码,可以不序列化或由编译器插入的atexit函数发生异常。
原因
问题是由于 C 运行时atexit函数不是线程安全的。因此,此函数所使用的内存表已损坏。
解决方案
软件更新信息
作为 Windows 嵌入式紧凑型 7 月更新 (6 月 2017) 支持的软件更新现可从 Microsoft。
注意:此 Windows 嵌入式紧凑 7 月更新程序可从下面的 Microsoft 下载中心网站下载:
系统必备组件
仅当此产品的所有以前发布的更新都已安装时才支持此更新。
重启要求
应用此更新后,您必须执行干净对整个平台的构建。若要执行此操作,请使用以下方法之一︰
-
在生成菜单中,单击清理解决方案,,然后单击生成解决方案。
-
单击生成菜单上的重新生成解决方案。
应用此软件更新后无需重新启动计算机。
更新替换信息
此更新不替代任何其他更新。
文件信息
因为这是一个全波版本。几乎所有二进制文件都受此版本。
下面的源代码文件不会影响此版本::
private\winceos\COREOS\core\corelibc\crtw32\startup\cexit.cpp private\winceos\COREOS\core\corelibc\crtw32\startup\onexit.c
更多信息
在多线程环境中, atexit函数表可能被另一个 atexit 调用损坏由于非线程安全。这可能会导致内存损坏和异常。Atexit函数用于注册程序退出或.dll 卸载时将执行的例程。在线程安全缺陷可能导致此退出例程的变更和退出函数表的损坏。
参考资料
了解 Microsoft 用于描述软件更新的术语。