我有一个用C编写的本机库。这是一个简单的函数,例如:
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);
如果我在辅助线程中调用此函数,本机代码是否会在同一个线程中执行?即如果本机函数是线程安全的,那么这个方法是否会并行运行而不会阻塞其他线程?
Task.Factory.StartNew(() => {
int value = my_test_method(2);
});
Bonus:在Windows,Linux,OSX,iOS和Android下,.NET和Mono是否适用?
答案 0 :(得分:3)
本机函数将在调用托管P / Invoke方法的同一线程上执行。
如果在后台线程上调用托管P / Invoke方法,则表示将执行本机函数的线程。
对于所有版本的.NET和Mono,在Windows,Linux,iOS,OSX,Android,Windows Phone以及我可能忘记的其他一些版本中都是如此。