KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
when a C# program holds a named semaphore, it does not seem to be released when the application is terminated early (for example by pressing Ctrl+C or closing the console window). At least not until all instances of the process have terminated. With a named mutex an AbandonedMutexException is raised in this case but not with a semaphore. How do you prevent one program instance from stalling when another program instance has been terminated early? class Program { // Same with count > 1 private static Semaphore mySemaphore = new Semaphore(1, 1, "SemaphoreTest"); static void Main(string[] args) { try { // Blocks forever if the first process was terminated // before it had the chance to call Release Console.WriteLine("Getting semaphore"); mySemaphore.WaitOne(); Console.WriteLine("Acquired..."); } catch (AbandonedMutexException) { // Never called! Console.WriteLine("Acquired due to AbandonedMutexException..."); } catch (System.Exception ex) { Console.WriteLine(ex); } Thread.Sleep(20 * 1000); mySemaphore.Release(); Console.WriteLine("Done"); } }
Tags (comma-separated)
Save Edits
Cancel