Параллелизм: относится к нескольким частям программы, выполняемым одновременно.
Параллелизм: несколько частей программы выполняются на нескольких процессорах одновременно.
Потоки в параллельном программировании
Поток — это легкий процесс, который использует одно и то же адресное пространство и другие ресурсы с другими потоками в том же процессе, но каждый поток имеет свой собственный поток выполнения.
Потоки обеспечивают более легкую модель параллельного программирования, чем процессы.
Создание темы
Библиотека потоков POSIX предоставляет API для создания потоков с именем pthread_create.
После создания потока в программе будет одновременно выполняться несколько потоков, поэтому корректность программы зависит от того, как эти потоки взаимодействуют друг с другом.
Синхронизация потоков
Синхронизация между потоками означает координацию их действий между потоками, чтобы они выполняли нужные операции в нужное время.
Общие механизмы синхронизации включают мьютексы, переменные условия и семафоры.
мьютекс
Мьютекс — это механизм синхронизации, используемый для управления доступом к общему ресурсу, чтобы гарантировать, что только один поток может получить доступ к общему ресурсу одновременно.
Библиотека потоков POSIX предоставляет мьютекс, называемый pthread_mutex.
переменная условия
Условная переменная — это механизм синхронизации, который позволяет потоку приостанавливаться в ожидании выполнения некоторого условия и возобновляться, когда условие выполнено.
Библиотека потоков POSIX предоставляет переменную условия, называемую pthread_cond.
сигнальная переменная
Семафор — это механизм синхронизации, используемый для управления доступом к общим ресурсам и обеспечивающий функции счетчика.
Библиотека потоков POSIX предоставляет семафор sem_t.
тупик
Взаимная блокировка — это ситуация, в которой два или более потоков ожидают друг от друга ресурсов, принадлежащих друг другу.
Взаимная блокировка — распространенная проблема в параллельном программировании, поэтому взаимодействие между потоками необходимо тщательно планировать.
Условия гонки потоков
Состояние гонки означает, что корректность программы зависит от порядка выполнения между потоками и доступа к общим ресурсам между потоками.
Условия гонки могут привести к неопределенному поведению или ошибкам программы, поэтому взаимодействие между потоками необходимо тщательно планировать.
Потокобезопасный дизайн
Потокобезопасность означает, что программа может корректно работать, когда несколько потоков выполняются одновременно.
Потокобезопасное проектирование включает использование механизмов синхронизации для защиты общих ресурсов, предотвращения состояний гонки и тщательного проектирования взаимодействия потоков.