Использование Mutex между C # EXE и C ++ DLL - PullRequest
0 голосов
/ 18 февраля 2010

Можно ли использовать объект Mutex для приложения, которое пользователи c ++ dll выполняют в фоновом режиме и ac # для его отображения.Бот использует общий ресурс, т.е.Так что Mutex может быть использован для блокировки этого ресурса.В моем db c ++ вставит в db, а c # прочитает его.

Ответы [ 4 ]

3 голосов
/ 18 февраля 2010

Существует вещь, называемая "именованным мьютексом", которая является объектом ОС и может быть разделена между различными библиотеками и приложениями только путем указания ее имени при создании / использовании.См. http://msdn.microsoft.com/en-us/library/ms682411%28VS.85%29.aspx

1 голос
/ 18 февраля 2010

Вы должны использовать этот конструктор в C # в пространстве имен System.Threading:

публичный Mutex ( bool изначальноOwned, имя строки, из bool создалНовый )

Часть C описана в других ответах - поэтому нет необходимости в Interop / PInvoke.

1 голос
/ 18 февраля 2010

Вы должны заблокировать БД вместо использования Mutex, так как всегда есть вероятность, что другие приложения могут получить доступ к тому же ресурсу.Даже если вы знаете, что только ваш dll и приложение в настоящее время получают доступ к ресурсу, кто-то может написать приложение для доступа к этому ресурсу и нарушить схему.

Взгляните на SQLite PRAGMA (lock_mode и синхронно).

0 голосов
/ 18 февраля 2010

В дополнение к ответу alemjerus:

http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx

Может быть, это работает для C #:

http://www.pinvoke.net/default.aspx/kernel32/CreateMutex.html

...