Heim >Backend-Entwicklung >C++ >Wie kann ich robuste globale Mutex -Muster in C#implementieren?

Wie kann ich robuste globale Mutex -Muster in C#implementieren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-30 22:12:13317Durchsuche

How to Implement Robust Global Mutex Patterns in C#?

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.

    Stellen Sie sicher, dass die gegenseitige Dispersion freigegeben wird:
  • Die Verwendung von Block füllt den gegenseitig ausschließenden Körper automatisch, wenn Sie den Bereich überschreiten, wodurch das Risiko einer suspendierten gegenseitigen Karosserie beseitigt wird. Out Time Processing:
  • Geben Sie die optionale Überstunden an, wenn Sie das gegenseitig ausschließliche Körper erhalten, um unbegrenztes Warten zu verhindern.
  • Die verlassene gegenseitig ausschließliche Behandlung: elegant, um die verlassene gegenseitige Körperschaft zu erhalten, um sicherzustellen, dass die Programmausführung nicht auf unbestimmte Zeit blockiert wird.
  • Multi -User -Sicherheit: gegenseitiger Ausschluss, um allen Benutzern explizite Zugriffsberechtigungen zu erteilen, die die Zusammenarbeit und die Freigabe von Ressourcen ermöglichen.
  • Schlussfolgerung
  • Dieses Modell bildet eine solide Grundlage für die Verwendung des globalen gegenseitigen Körpers in C#, um eine sichere und zuverlässige Ausführung zu gewährleisten. Durch die Befolgung dieser Kriterien können Entwickler die Freigabe von Ressourcen effektiv verwalten und potenzielle Probleme im Zusammenhang mit der Verwendung von gegenseitigen Alternativen verhindern.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn