В пространстве имен System.Threading
содержится класс Timer
, позволяющий повторять выполнение какой-либо задачи в потоке через равные промежутки времени. Рассмотрим несколько примеров использования таймеров в приложениях C#.
многопоточность
Многопоточность в C#. Способы синхронизации потоков
В предыдущей части мы рассмотрели один из вариантов синхронизации потоков в многопоточном приложении — использование оператора lock
. При этом в .NET имеются и другие способы синхронизации потоков о которых мы сегодня и поговорим.
Многопоточность в C#. Конкурентный доступ и синхронизация
Часто различные потоки в приложении используют разделяемые (общие для всех) ресурсы. Например, несколько потоков могут использовать один и тот же файл для записи лога или несколько потоков используют список List
для чтения/записи элементов и так далее. Как только два и более потоков обращаются к одному и тому же ресурсу приложения, у них возникает конкуренция и предугадать в какой последовательности сработают потоки — не возможно. Итог работы будет зависеть от самой операционной системы и того, как система будет выделять ресурсы потокам. Чтобы поведение многопоточного приложения было предсказуемым нам необходимо каким-либо образом разрешить конкурентный доступ потоков к общим ресурсам. Для этого используются различные способы синхронизации потоков
Многопоточность в C#. Делегаты потоков
Во введении к циклу статей про Многопоточность в C# мы создали простое приложение, демонстрирующее работу двух потоков, не вдаваясь особенно в то, что мы написали. Сегодня мы более подробнее посмотрим на конструкторы класса Thread
, а именно — рассмотрим делегаты, используемые при создании потоков.
Многопоточность в C#. Введение
Одним из ключевых моментов программирования является многопоточность. Поток (thread) — это некий путь выполнения кода. Даже, если мы создаем обычное консольное приложение типа «Hello world», то создается, как минимум один (он же главный) поток, который начинает свой путь с метода Main
. Каждому потоку в приложении выделяется определенное количество времени (квант) в течение которого поток выполняет возложенную на него задачу. И, даже, если компьютер оснащен одноядерным процессором мы можем создавать несколько потоков в приложении, однако это будет, скорее, псевдо-многопоточность в рамках которой потоки просто будут очень быстро переключаться между собой, обеспечивая тем самым эффект многопоточности.