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

Is a method invoked by P/Invoke running in the same thread?

我有一个用 C 编写的本机库。例如,这是一个简单的函数:

int my_test_method(int value) {
  return value * 2;
}

我也在 C# 中声明了这个方法 P/Invoke class:

[DllImport("helloworld.so", CallingConvention = CallingConvention.Cdecl)]
public static extern int my_test_method(int value);

如果我在辅助线程中调用这个函数,本地代码会在同一个线程中执行吗?即如果本机函数是线程安全的,此方法是否会 运行 并行而不阻塞其他线程?

Task.Factory.StartNew(() => {
  int value = my_test_method(2);
});    

奖励:在 Windows、Linux、OSX、iOS 和 Android 下,对于 .NET 和 Mono 是否如此?

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

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

这适用于所有版本的 .NET 和 Mono,在 Windows、Linux、iOS、OSX、Android、Windows Phone,可能还有其他一些我也忘记了。