Лекция: Проблема недетерминизма в многопоточных программах. Поддержка синхронизации потоков в POSIX Threads. Критические секции.
Программа называется недетерминированной, если при одних и тех же входных данных она может демонстрировать различное наблюдаемое поведение.
Преодоление недетерминизма: синхронизация:
Примитивы синхронизации в PTHREADS: Семафоры. Критические секции. Условные переменные.
«Мютекс» — mutex – mutual exclusion (взаимное исключение);
Объявление и инициализация:
pthread_mutex_t – тип для взаимного исключения;
pthread_mutex_init(pthread_mutex_t* mutex, void* attribute);
pthread_mutex_destroy(pthread_mutex_t* mutex);
Захват и освобождение мютекса:
pthread_mutex_lock(pthread_mutex_t* mutex);
pthread_mutex_unlock(pthread_mutex_t* lock);
Освобождение мютекса может быть осуществлено только тем тредом, который производил его захват.
Итого: PTHREADS – переносимая библиотека системного уровня для разработки многопоточных программ
Дает возможность получить эффективность близкую к максимально-возможной, но при этом требуется серьезная переработка кода.