Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# P/Invoke调用的方法是否在同一线程中运行?_C#_.net_Multithreading_Mono_Pinvoke - Fatal编程技术网

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

C# P/Invoke调用的方法是否在同一线程中运行?,c#,.net,multithreading,mono,pinvoke,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); 如果在辅助线程中调用此函数,本机代

我有一个用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);
如果在辅助线程中调用此函数,本机代码是否会在同一线程中执行?i、 e.如果本机函数是线程安全的,该方法是否会并行运行而不阻塞其他线程

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

额外好处:在Windows、Linux、OSX、iOS和Android下,对于.NET和Mono是这样吗?

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

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


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

线程不受调用的影响,为什么要这样做呢?pinvoke也可以在单线程环境中工作。