Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Mono嵌入:用于同步托管和本机的互斥 有一个本地C++应用程序(Linux)加载单程序集。 如何在同一应用程序的托管部分和本机部分之间共享互斥(或其类似物)_Mono_Embed_Native_Mutex - Fatal编程技术网

Mono嵌入:用于同步托管和本机的互斥 有一个本地C++应用程序(Linux)加载单程序集。 如何在同一应用程序的托管部分和本机部分之间共享互斥(或其类似物)

Mono嵌入:用于同步托管和本机的互斥 有一个本地C++应用程序(Linux)加载单程序集。 如何在同一应用程序的托管部分和本机部分之间共享互斥(或其类似物),mono,embed,native,mutex,Mono,Embed,Native,Mutex,大概是这样的: 本地部分: 单部件: 必须向托管代码公开本机互斥体,如下所示: C代码: pthread\u mutex\u t*managed\u get\u mutex() { 返回&db_互斥体; } 无效托管锁互斥(pthread\u mutex\u t*mutex) { pthread_mutex_lock(互斥锁): } 无效托管\u解锁\u互斥体(pthread\u mutex\u t*mutex) { phtrade_互斥锁_解锁(互斥锁); } C#代码: 类NativMut

大概是这样的:

本地部分: 单部件:
必须向托管代码公开本机互斥体,如下所示:

C代码:

pthread\u mutex\u t*managed\u get\u mutex()
{
返回&db_互斥体;
}
无效托管锁互斥(pthread\u mutex\u t*mutex)
{
pthread_mutex_lock(互斥锁):
}
无效托管\u解锁\u互斥体(pthread\u mutex\u t*mutex)
{
phtrade_互斥锁_解锁(互斥锁);
}
C#代码:

类NativMutex{
[DllImport(“国家图书馆”)]
公共静态导出IntPtr get_managed_mutex();
[DllImport(“国家图书馆”)]
公共静态导出void托管锁互斥体(IntPtr互斥体);
[DllImport(“国家图书馆”)]
公共静态导出无效管理的\u解锁\u互斥体(IntPtr互斥体);
}
native_lock_mutex(&db_mutex);
// do something with db
native_unlock_mutex(&db_mutex);
managed_lock_mutex(db_mutex);
// do something with db
managed_unlock_mutex(db_mutex);