概要
この資料で説明する問題と、複数のスレッドを同時に Windows 埋め込まれたコンパクトな 7 C 実行時"atexit"関数を呼び出して、n 個の例外が発生します。この問題を解決するための更新プログラムが利用可能です。この更新プログラムをインストールする前にこの製品の以前に発行されたすべての更新プログラムをインストールする必要があります。
現象
Windows 埋め込まれたコンパクト 7 で同時に複数のスレッドが、C ランタイムのatexitの関数を呼び出すと、例外が表示される場合があります。Atexitの関数を呼び出すコードがシリアル化されない場合、またはatexit関数は、コンパイラによって挿入、例外が発生します。
原因
C 実行時のatexitの関数はスレッド セーフではないために、問題が発生します。したがって、関数を使用するメモリのテーブルが壊れています。
解決策
ソフトウェアの更新情報
サポートされているソフトウェア更新プログラムが Microsoft Windows 埋め込まれたコンパクトな 7 月の更新 (2017年 6 月) として。
注: この Windows 埋め込まれたコンパクトな 7 月の更新は、次のマイクロソフト ダウンロード センター web サイトからダウンロード可能です。
必要条件
この製品の以前に発行されたすべての更新プログラムがインストールされても場合にのみ、この更新プログラムはサポートされています。
再起動の必要性
この更新プログラムを適用した後、プラットフォーム全体のクリーン ビルドを行う必要があります。これを行うには、次の方法のいずれかの手順に従います。
-
[ビルド] メニューで、[ソリューションのクリーン] をクリックし、[ソリューションのビルド] をクリックします。
-
[ビルド] メニューで、ソリューションのリビルド]をクリックします。
このソフトウェア更新プログラムを適用した後コンピューターを再起動する必要はありません。
更新プログラムの置き換えに関する情報
この更新プログラムは、他の更新プログラムを置き換えません。
ファイル情報
全波リリースはします。ほとんどすべてのバイナリは、このリリースの影響を受けます。
このリリースで、次のソース ファイルが影響を受ける:。
private\winceos\COREOS\core\corelibc\crtw32\startup\cexit.cpp private\winceos\COREOS\core\corelibc\crtw32\startup\onexit.c
詳細情報
マルチ スレッド環境では、 atexitの関数テーブルは非スレッド セーフのための atexit の別の呼び出しによって破損可能性があります。これは、メモリが破損したり例外です。Atexit関数は、プログラムを終了するか、.dll がアンロードされるときに実行されるルーチンを登録するのには使用されています。スレッドの安全性の問題は、この終了ルーチンに変更を加えると、終了関数テーブルの破損する可能性があります。
関連情報
Microsoft がソフトウェア更新プログラムを説明するために使用している用語について説明します。