2011-02-06 6 views
1

2つのスレッドが共有DLLライブラリを呼び出している場合、2つのスレッド間で「会話」(または情報交換)を作成できますか?そして、この会話が可能な場合、実際にスレッド間で行われる要件や制限は何ですか?情報共有DLLを呼び出して2つのスレッド間の情報交換

この質問は私たちの教授が私たちに与えました。質問の文脈では、私の教授が会話を成功させるために2つのスレッド間で必要とされる同期化を指しているか、またはDLLリンクタイプ(暗黙的または明示的な)を制限していることしか仮定していません。その後、再び

、仮定かどうか、私はここで損失:)

P.S.ではなく、午前 - C++は、多くの暗黙の割り当てを持っているので、このケースでは、我々はC.

でプログラミングしているあなたの助け:)

+0

私はこれがあなたの実際の質問であると信じられません。どういうわけかどこかで言葉を混乱させましたか?正確な言葉は何ですか?あなたの教授が上記を書いたら、私は教授に失敗します! –

+0

ちょっとデイブ、言葉が混乱していない、それは...そのままの質問だった。 – AdiB

答えて

0

を事前に感謝し、あなたはBoost.Interprocessを、使用して考えました。一般的には、メモリのその部分へのアクセスを同期させるためにシステム全体のmutexが必要です。

+0

スレッドが同じプロセスにある場合、ミューテックスはシステムワイドでは必要ありません。 –

1

あなたの教授は、DLLがどの領域に読み込まれているか、そしてこれがスレッドとどのように関連しているかを理解しているようです。

あなたの宿題をすることなく、2つのスレッドがそれぞれ特定のDLLでLoadLibrary()を呼び出す場合、何が起こるかを検討することをお勧めします。 DLLがプロセスに2回ロードされていますか?

上記の結果を考えれば、2つのスレッドがそのDLLを呼び出すことにどのような影響がありますか?

+0

ちょっとジェフ、どこに向かうのか分かっていると思うよ。リンクが暗黙的である場合、スレッドによって呼び出される関数に割り当てられるメモリーは一意でなければなりません。リンクがExplicitの場合、2つの異なる機能(まだ同一)が作成され、「会話」が発生することはありません。私はそれが正しいことを願って....おかげでもう一度:) – AdiB

+0

私はまだあなたの元の質問に答えなければならないと思います: 1) "2つのスレッドがそれぞれ特定のDLLでLoadLibrary()を呼び出すとどうなるか考えてみましょう。 DLLがプロセスに2回ロードされていますか? 2)暗黙的で明示的なDLLリンクは、実際にDLLがメモリ内のどこに配置されるか、または初期化される方法に影響しますか? – Jeff

0

私は各スレッドにLoadLibrary()を呼び出すと、各DLLに異なるメモリセグメントが割り当てられるため、各スレッドは相互に動作するリソースを持たないため、情報を交換できなくなると思います。

けど... は、私は、DLLが完全にプログラムの起動時にロードされるため、このようにあなたは、スレッド間でリソースを共有することができるでしょうことを考える私たちは#Pragam Comment(lib, "myDLL.lib") を使用してDLLを明示的にリンクされますと言います。

Jeff? ..これは正しいですか?...

+0

いいえ、それは正しくありません。 –

関連する問題