2

WindowsでのDLLのロードとアンロードに関連してOSローダーロックがどのように使用されるかをもう少し詳しく理解しようとしています。

新しいスレッドが作成/破棄されたとき、または新しいDLLがロード/アンロードされたときに、ロードされたすべてのDLLに通知が届くことを理解しています。

つまり、DllMain関数はロック内で実行され、実行中は他のスレッドがそれにアクセスできません。その関数で別のスレッドを作成すると、プロセスやOSがハングする可能性がありますか?

私の理解は正しいですか?

これを説明する記事はどこかにありますか?

4

3 に答える 3

1

デッドロックは、2つのスレッドが異なる順序で2つのロックを取得しようとしたときに発生する可能性があります。

  • スレッドAはロックAを取得してから、ロックBを取得しようとします
  • 一方、スレッドBはロックBを取得してから、ロックAを取得しようとします。

DllMainを実行しているスレッドはすでに暗黙のO/Sロックを取得しています。したがって、彼ら(Microsoft)は、そのスレッドが他の2番目のロックを取得しようとするのは安全ではないと考えています(たとえば、別のスレッドがすでにそのロックを所有している可能性があるため、現在、暗黙のO / Sロックでブロックされています)。

于 2010-06-20T12:26:19.157 に答える
0

それは正しいです。

オペレーティングシステムのローダーによって初期化される前にデッドロックやDLLの使用につながる可能性があるため、このような実行は違法です。

詳細については、こちらをご覧ください:LoaderLock MDA(MSDN Webサイト)

于 2010-06-20T12:23:48.227 に答える
0

レイモンド・チェンはこれについて説明します

于 2010-06-22T09:38:08.817 に答える