我有一个不线程安全的C库 - 可能永远不会。我是用PInvoke用C#调用的,而且效果非常好。
现在必须从C#程序调用C库,该程序当然是多线程的。我可以在C#中通过从单独的AppDomains调用每个C代码实例来管理它,除了看起来效果不佳。我仍然在C库中遇到很多跨线程问题。
AppDomains是否会将C代码混乱(全局等等)彼此隔离或不隔离?如果没有,会是什么?
答案 0 :(得分:5)
不,AppDomains无济于事。如果同时调用C lib,则调用来自哪个AppDomain无关紧要。
如果C lib不是线程安全的,则必须序列化对它的访问。实际上,拥有多个AppDomain会使这一点变得更加困难 - 您必须跨域进行同步。
答案 1 :(得分:1)
我认为AppDomains是一种仅隔离托管代码的构造。
您必须使用可用的c#/。NET同步原语(例如使用lock
块)同步对c lib的访问。
答案 2 :(得分:1)
如果C库中有全局/共享变量,并且需要隔离它们,则必须启动单独的进程。