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);