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

1 に答える 1

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);
}
于 2012-11-01T09:18:05.250 に答える