示例#1
0
        private static void Main(string[] args)
        {
            var syncObject = new object();
            var semaphore  = new SemaphoreSlim(1, 1);

            var criticalSectionsLocker = new Syncer(
                () => Monitor.Enter(syncObject),
                () => Monitor.Exit(syncObject)
                );

            var semaphoreLocker = new Syncer(
                () => semaphore.Wait(),
                () => semaphore.Release()
                );

            var shop = new ShopMaintainer(semaphoreLocker)
            {
                new Product("Чай Липтон", 20, 30),
                new Product("Колбаса", 40, 20),
                new Product("Булка", 4, 20),
                new Product("Сырок", 1, 10)
            };

            var clients = new[] {
                new Client("Hey", 1000000),
                new Client("Bro", 1000000),
                new Client("Dont", 1000000),
                new Client("Stop", 1000000),
                new Client("Jake", 1000000),
                new Client("Tyler", 2000000),
                new Client("Harry", 6000000),
                new Client("Jeffrey", 8000000)
            };

            PrintClients(clients);
            shop.PrintProducts();

            Parallel.ForEach(clients, shop.SellItems);

            PrintClients(clients);
            shop.PrintProducts();

            Console.ReadLine();
        }
 public ShopMaintainer(Syncer syncer)
 {
     _syncer = syncer;
 }