.Net AppDomains是否提供针对恶意C库的保护?

时间:2011-11-03 16:09:38

标签: c# c multithreading appdomain

我有一个线程安全的C库 - 可能永远不会。我是用PInvoke用C#调用的,而且效果非常好。

现在必须从C#程序调用C库,该程序当然是多线程的。我可以在C#中通过从单独的AppDomains调用每个C代码实例来管理它,除了看起来效果不佳。我仍然在C库中遇到很多跨线程问题。

AppDomains是否会将C代码混乱(全局等等)彼此隔离或不隔离?如果没有,会是什么?

3 个答案:

答案 0 :(得分:5)

不,AppDomains无济于事。如果同时调用C lib,则调用来自哪个AppDomain无关紧要。

如果C lib不是线程安全的,则必须序列化对它的访问。实际上,拥有多个AppDomain会使这一点变得更加困难 - 您必须跨域进行同步。

答案 1 :(得分:1)

我认为AppDomains是一种仅隔离托管代码的构造。

您必须使用可用的c#/。NET同步原语(例如使用lock块)同步对c lib的访问。

答案 2 :(得分:1)

如果C库中有全局/共享变量,并且需要隔离它们,则必须启动单独的进程。