2011-02-06 82 views
1

如果这两个线程正在调用共享DLL库,您可以在2个线程之间创建“对话”(或 - 信息交换)吗?而且,如果这种对话是可能的,那么在线程之间实际发生什么要求或限制?通过调用共享DLL在两个线程之间进行信息交换

这个问题是由我们的教授给我们的。在这个问题的背景下,我只能假设我的教授指的是两个线程之间为了对话成功或限制DLL链接类型(隐式或显式)所需的同步。

话又说回来,假设或不是,我宁愿在这里损失:)

附: - 在这种情况下,我们在编程C.

在此先感谢您的帮助:)

+0

我不能相信这是你的实际问题。你有没有把某些地方的单词弄乱?确切的话是什么。如果你的教授写了上面的话,那么我会让教授失望! – 2011-02-07 10:01:14

+0

嘿戴夫,没有任何话语被破坏,这是一个问题......是。 – AdiB 2011-02-07 17:41:20

回答

0

你有没有考虑使用Boost.Interprocess中,因为C++有很多隐含的分配。一般来说,你需要一个系统范围的互斥体来同步对这部分内存的访问。

+0

如果线程处于相同的进程中,那么系统范围内不需要互斥体。 – 2011-02-07 09:57:50

1

看起来你的教授正在测试你对加载到哪个空间DLL的理解,以及它与线程的关系。

如果没有为你做足功课,我鼓励你考虑一下,如果两个线程在特定的DLL上调用LoadLibrary(),会发生什么情况。 DLL是否加载到进程两次?

鉴于上述结果,这对于调用该DLL的两个线程有​​什么影响?

+0

嘿杰夫,我想我明白你要去的地方。如果链接是隐式的,则为线程调用的函数分配的内存应该是唯一的。如果链接是Explicit,那么将创建两个不同的函数(但是相同的),并且因此不允许“对话”发生。我希望我得到它的权利....再次感谢:) – AdiB 2011-02-07 17:43:51

0

我认为给每个线程调用LoadLibrary()系统会为每个DLL分配不同的内存段,因此每个线程都没有相互的资源来处理,因此他们将无法交换任何信息。

但是... 说,我们将明确地链接到使用#Pragam Comment(lib, "myDLL.lib") 我认为,这样你就可以在线程之间共享资源,因为DLL是在程序启动时满载的DLL。

杰夫? ..是这样吗?...

相关问题