2014-01-21 12 views
6

Unter Windows/.NET kann ein benannter Mutex zum Synchronisieren mehrerer Prozesse verwendet werden. Leider unterstützt Mono das auf Linux nicht ganz. Ihre release notes sagen, dass Linux diese Windows-Funktion nicht unterstützt und es wäre unzuverlässig, es zu emulieren. Es scheint am besten, den vorgeschlagenen Hack zu vermeiden, um es trotzdem zu ermöglichen.Mono-Alternative für benannten Mutex

Was sind also vorgeschlagene Alternativen? Ich muss mein Programm so einrichten, dass es gleichzeitig ausgeführt werden kann, nur ein kurzer Abschnitt muss mit anderen Instanzen synchronisiert werden.

Die Anwendung muss schließlich auf Ubuntu Linux mit Mono 2.10 bereitgestellt werden, aber für die Prüfung, wäre es sehr geschätzt, wenn es auf Windows 7 mit .NET 4.

+0

Sie könnten einen C (oder C++) Wrapper und einen Klebecode für Mono um einige Linux-Synchronisations-Primitive schreiben (siehe Posix-Semaphore und [sem_overview (7)] (http://man7.org/linux/man-pages/man7) /sem_overview.7.html) etc ...) –

+0

Eigentlich weiß ich nicht, wie man Mono klebt, ich kann es einfach benutzen, mit C#. Auch dies wäre überhaupt nicht plattformübergreifend. – ygoe

Antwort

5

UPDATE funktioniert auch:
Try zu betrachten http://aakinshin.net/en/blog/dotnet/namedmutex-on-mono/

OLD:
Mono keinen nativen Windows-IPC unterstützt. Sie haben also zum Beispiel Named Pipes oder Mutexes nicht.

Aber zu sync threads in dem gleichen Prozess können Sie Monitor class explizit verwenden (es auch für Sperre verwendet).

Um einfach einen anderen Prozess zu benachrichtigen können Sie versuchen, Unix Domain Sockets zu verwenden.
Überprüfen Sie UnixEndPoint Klasse dafür. Einer der Vorteile, den Sie benennen können (wie für named Semaphore zum Beispiel).

Sie können auch versuchen, emulieren Mutex mit eigenen Datei. Versuchen Sie, exklusiven Zugriff auf bestimmte eigene Dateien zu erhalten. Während Sie diesen Zugriff haben - befinden Sie sich in einem kritischen Bereich.

+2

Dinge sind jetzt sehr unterschiedlich - http://aakinshin.net/en/blog/dotnet/namedmutex-on-mono/ – user3791372

+0

ja kann es sein ... vor allem, wenn MS Xamaring erworben und .Net Core fördern wollen. Ich werde die Antwort mit deinem Link aktualisieren ... – Maxim