Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk melaksanakan corak mutex global yang mantap di C#?
c#Kesedaran yang boleh dipercayai dari mod badan bersama Global
Kelas Mutex dalam C#menyediakan mekanisme untuk mengawal akses kepada pelbagai benang atau proses perkongsian sumber. Badan bersama bersama global mempunyai skop sistematik, dan telah mencadangkan cabaran unik dalam memastikan penggunaan yang selamat dan boleh dipercayai. Artikel ini membincangkan model komprehensif untuk mewujudkan dan berkesan penggunaan expecket bersama global, dan menyelesaikan aspek utama kemerdekaan penetapan serantau, pelepasan pemecatan bersama yang betul, dan memproses keadaan yang tidak normal.
Pelaksanaan mod
Contoh kod berikut menunjukkan mod yang boleh dipercayai menggunakan badan bersama global:
Ciri -ciri Utama
<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>
Kemerdekaan tetapan serantau: ID bersama menggunakan generasi GUID aplikasi untuk memastikan ia unik di kawasan yang berbeza.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan corak mutex global yang mantap di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!