我有一个用 C 编写的 native 库。例如,这是一个简单的函数:
int my_test_method(int value) {
return value * 2;
}
我还在 C# P/Invoke 类中声明了这个方法:
[DllImport("helloworld.so", CallingConvention = CallingConvention.Cdecl)]
public static extern int my_test_method(int value);
如果我在辅助线程中调用这个函数,本地代码会在同一个线程中执行吗?即,如果 native 函数是线程安全的,此方法是否会并行运行而不会阻塞其他线程?
Task.Factory.StartNew(() => {
int value = my_test_method(2);
});
额外奖励:在 Windows、Linux、OSX、iOS 和 Android 下,对于 .NET 和 Mono 是否如此?
最佳答案
native 函数将在调用托管 P/Invoke 方法的同一线程上执行。
如果您在后台线程上调用托管 P/Invoke 方法,则 native 函数将在该线程上执行。
对于所有版本的 .NET 和 Mono,Windows、Linux、iOS、OSX、Android、Windows Phone 以及我可能忘记的其他一些版本都是如此。
关于c# - P/Invoke 调用的方法是否在同一个线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217567/