Heim >Backend-Entwicklung >C++ >Wie kann ich robuste globale Mutex -Muster in C#implementieren?
c#Die zuverlässige Realisierung des globalen gegenseitigen Körpermodus
Die Mutex -Klasse in c#bietet einen Mechanismus zur Steuerung des Zugriffs auf mehrere Threads oder Prozesse, die Ressourcen teilen. Der globale gegenseitige Körperschaft hat einen systematischen Bereich und hat einzigartige Herausforderungen vorgeschlagen, um eine sichere und zuverlässige Verwendung zu gewährleisten. In diesem Artikel wird ein umfassendes Modell zum Erstellen und einer effektiven Nutzung globaler gegenseitiger Speckets erörtert und die wichtigsten Aspekte der regionalen Unabhängigkeit, die korrekte Veröffentlichung der gegenseitigen Entlassung und die Verarbeitung abnormaler Bedingungen löst.
Modus -Implementierung
Das folgende Code -Beispiel zeigt die zuverlässige Art der Verwendung des globalen gegenseitigen Körpers:
Schlüsselfunktionen
<code class="language-csharp">using System.Runtime.InteropServices; //GuidAttribute using System.Reflection; //Assembly using System.Threading; //Mutex using System.Security.AccessControl; //MutexAccessRule using System.Security.Principal; //SecurityIdentifier // ... // 主应用程序逻辑 static void Main(string[] args) { // 获取应用程序的唯一GUID string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly() .GetCustomAttributes(typeof(GuidAttribute), false) .GetValue(0)).Value.ToString(); // 创建全局唯一的互斥体ID string mutexId = string.Format( "Global\{{{0}}}", appGuid ); // 为多用户使用建立安全设置 var allowEveryoneRule = new MutexAccessRule( new SecurityIdentifier( WellKnownSidType.WorldSid , null) , MutexRights.FullControl , AccessControlType.Allow ); var securitySettings = new MutexSecurity(); securitySettings.AddAccessRule(allowEveryoneRule); // 使用指定的ID和安全设置初始化互斥体 using (var mutex = new Mutex(false, mutexId, out bool createdNew, securitySettings)) { // 尝试获取互斥体句柄,设置超时 var hasMutexHandle = false; try { hasMutexHandle = mutex.WaitOne(5000, false); } catch (AbandonedMutexException) { // 记录日志并获取被放弃的互斥体 hasMutexHandle = true; } // 在互斥体范围内执行关键操作 if (hasMutexHandle) { // ... mutex.ReleaseMutex(); } } }</code>
Unabhängigkeit der regionalen Einstellungen: Die gegenseitige ID verwendet die GUID -Erzeugung der Anwendung, um sicherzustellen, dass sie in verschiedenen Bereichen eindeutig ist.
Das obige ist der detaillierte Inhalt vonWie kann ich robuste globale Mutex -Muster in C#implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!