P / Invoke调用的方法是否在同一个线程中运行?

时间:2015-03-23 18:20:42

标签: c# .net multithreading mono pinvoke

我有一个用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是否适用?

1 个答案:

答案 0 :(得分:3)

本机函数将在调用托管P / Invoke方法的同一线程上执行。

如果在后台线程上调用托管P / Invoke方法,则表示将执行本机函数的线程。

对于所有版本的.NET和Mono,在Windows,Linux,iOS,OSX,Android,Windows Phone以及我可能忘记的其他一些版本中都是如此。