Lock

При записі чи читанні з файлу, або роботою в інтернеті lock() обмежує кількість потоків, які одночасно отримують доступ до ресурсу (до одного)

        private static object locker = new object();

        static void Main(string[] args)

        {

            for (int i = 0; i < 6; i++)

            {

                // new Thread(F1).Start();

                Task.Run(() => F1());

            }

            Console.ReadKey();

        }

        static void F1()

        {

            Console.WriteLine("Wait... " + Thread.CurrentThread.ManagedThreadId);

            lock(locker)

            {

                Console.WriteLine("START> " + Thread.CurrentThread.ManagedThreadId);

                Thread.Sleep(1000);

                Console.WriteLine("END " + Thread.CurrentThread.ManagedThreadId);

            }

        }

Wait... 6

START> 6

Wait... 11

Wait... 12

Wait... 14

Wait... 17

Wait... 13

END 6

START> 11

END 11

START> 12

END 12

START> 14

END 14

START> 13

END 13

START> 17

END 17

При виконанні блоку коду lock (locker) інші потоки не переривають виведення даних з поточного потоку і не збивають значенні змінної х

        static int x = 0;

        static object locker = new object();

        static void Main(string[] args)

        {

            for (int i = 0; i < 5; i++)

            {

                Thread myThread = new Thread(F1);

                myThread.Name = "Thread " + i.ToString();

                myThread.Start();

            }

            Console.ReadLine();

        }

        public static void F1()

        {

            lock (locker)

            {

                x = 1;

                for (int i = 1; i < 9; i++)

                {

                    Console.WriteLine(Thread.CurrentThread.Name + ": " + x);

                    x++;

                    Thread.Sleep(100);

                }

            }

        }

Thread 0: 1

Thread 0: 2

Thread 0: 3

Thread 0: 4

Thread 0: 5

Thread 0: 6

Thread 0: 7

Thread 0: 8

Thread 1: 1

Thread 1: 2

Thread 1: 3

Thread 1: 4

Thread 1: 5

Thread 1: 6

Thread 1: 7

Thread 1: 8

Thread 2: 1

Thread 2: 2

Thread 2: 3

Thread 2: 4

Thread 2: 5

Thread 2: 6

Thread 2: 7

Thread 2: 8

Thread 3: 1

Thread 3: 2

Thread 3: 3

Thread 3: 4

Thread 3: 5

Thread 3: 6

Thread 3: 7

Thread 3: 8

Thread 4: 1

Thread 4: 2

Thread 4: 3

Thread 4: 4

Thread 4: 5

Thread 4: 6

Thread 4: 7

Thread 4: 8

Без lock (locker)

Thread 0: 1

Thread 1: 1

Thread 3: 1

Thread 2: 1

Thread 4: 1

Thread 0: 2

Thread 3: 2

Thread 2: 2

Thread 4: 2

Thread 1: 2

Thread 3: 7

Thread 2: 7

Thread 1: 7

Thread 0: 7

Thread 4: 7

Thread 0: 12

Thread 1: 12

Thread 4: 12

Thread 2: 12

Thread 3: 12

Thread 1: 17

Thread 4: 17

Thread 0: 17

Thread 2: 17

Thread 3: 17

Thread 1: 22

Thread 3: 23

Thread 0: 23

Thread 4: 23

Thread 2: 23

Thread 1: 27

Thread 0: 28

Thread 4: 28

Thread 3: 28

Thread 2: 28

Thread 1: 32

Thread 0: 33

Thread 3: 33

Thread 4: 33

Thread 2: 33