2012-11-01 41 views
2

有一个加载单声道程序集的原生C++应用程序(linux)。 如何在同一应用程序的托管部分和本机部分之间共享互斥锁(或其模拟)?单声道嵌入:用于同步托管和本地互斥的互斥

是这样的:

本地部分:

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

非常感谢罗尔夫! – sharpensteel

回答

0

您必须公开本机互斥托管代码,像这样:

C代码:

pthread_mutex_t* managed_get_mutex() 
{ 
    return &db_mutex; 
} 

void managed_lock_mutex (pthread_mutex_t *mutex) 
{ 
    pthread_mutex_lock (mutex): 
} 

void managed_unlock_mutex (pthread_mutex_t *mutex) 
{ 
    phtread_mutex_unlock (mutex); 
} 

C#代码:

class NativMutex { 
    [DllImport ("nativeLibrary")] 
    public static export IntPtr get_managed_mutex(); 

    [DllImport ("nativeLibrary")] 
    public static export void managed_lock_mutex (IntPtr mutex); 

    [DllImport ("nativeLibrary")] 
    public static export void managed_unlock_mutex (IntPtr mutex); 
}