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,可能还有其他一些我也忘记了。
我有一个用 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,可能还有其他一些我也忘记了。