using System;
using System.Threading;
public class Test
{
public static void Main()
{
var semaphore = new Semaphore(0, int.MaxValue);
Console.WriteLine("Pre");
semaphore.Release();
Console.WriteLine("Released once");
semaphore.Release();
Console.WriteLine("Released twice");
semaphore.WaitOne();
Console.WriteLine("Waited once");
semaphore.WaitOne();
Console.WriteLine("Waited twice");
semaphore.WaitOne();
Console.WriteLine("Waited thrice");
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBzZW1hcGhvcmUgPSBuZXcgU2VtYXBob3JlKDAsIGludC5NYXhWYWx1ZSk7CgkJCgkJQ29uc29sZS5Xcml0ZUxpbmUoIlByZSIpOwoJCXNlbWFwaG9yZS5SZWxlYXNlKCk7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIlJlbGVhc2VkIG9uY2UiKTsKCQlzZW1hcGhvcmUuUmVsZWFzZSgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJSZWxlYXNlZCB0d2ljZSIpOwoJCXNlbWFwaG9yZS5XYWl0T25lKCk7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIldhaXRlZCBvbmNlIik7CgkJc2VtYXBob3JlLldhaXRPbmUoKTsKCQlDb25zb2xlLldyaXRlTGluZSgiV2FpdGVkIHR3aWNlIik7CgkJc2VtYXBob3JlLldhaXRPbmUoKTsKCQlDb25zb2xlLldyaXRlTGluZSgiV2FpdGVkIHRocmljZSIpOwoJfQp9