Преглед изворни кода

Merge branch 'master' of u20-24goncharov/up into master

ypv пре 2 година
родитељ
комит
48da13cd74

BIN
ЭАСвЗИ/Лекции/2.5.1200_Управление_режимом_потоков/231.jpg


BIN
ЭАСвЗИ/Лекции/2.5.1200_Управление_режимом_потоков/321.jpg


+ 37 - 0
ЭАСвЗИ/Лекции/2.5.1200_Управление_режимом_потоков/Гончаров доклад.txt

@@ -0,0 +1,37 @@
+##Понятие потока
+
+#Поток (thread) можно определить как часть процесса, включающая управляющую последовательность команд и использующая системные ресурсы этого процесса.
+Существует две основных категории реализации потоков: Пользовательские потоки – потоки, реализуемые через
+специальные библиотеки потоков и работающие в пользовательском пространстве.
+Потоки уровня ядра – потоки, реализуемые через системные вызовы и работающие в пространстве ядра.
+Каждый процесс имеет, как минимум, один поток, при этом самый первый поток, создаваемый при рождении нового процесса, принято называть начальным или главным потоком этого процесса.
+Основное отличие процесса от потока заключается в способе использования системных ресурсов. Дочерний процесс практически независим от родительского, для него системой выделяется отдельное адресное пространство, и он на равных правах с родительским процессом «конкурирует» за процессорное время. При этом можно уничтожить родительский процесс, не затронув дочерний, который может выполняться и после завершения родительского процесса.
+#Первая подсистема потоков в Linux появилась в 1996 году и называлась LinuxThreads, ее автором является Ксавье Лерой (Xavier Leroy). Разработанная им библиотека LinuxThreads была попыткой организовать поддержку потоков в Linux в то время, когда ядро системы еще не предоставляло никаких специальных механизмов для работы с потоками. Позднее разработку потоков для Linux вели сразу две конкурирующие группы – NGPT (New Generation POSIX Threads) и NPTL (Native POSIX Thread Library). В 2002 году группа NGPT
+фактически присоединилась к NPTL и теперь реализация потоков NPTL является стандартом Linux. Подсистема потоков Linux стремится соответствовать требованиям стандартов POSIX, поэтому новые многопоточные приложения Linux должны без проблем компилироваться на новых POSIX-совместимых системах.
+![](231.jpg)
+##Основные функции для работы с потоками
+
+Для работы с потоками используются следующие основные функции:
+*pthread_create – создание потока;
+*pthread_join – блокирование работы вызвавшего функцию процесса или потока в ожидании завершения потока;
+*pthread_cancel – досрочное завершение потока из другого потока или процесса;
+*pthread_exit – завершает поток, код завершения передается функции pthread_join. Данная функция подобна функции exit, однако вызов exit в «основном» процессе программы приведет к завершению всей программы.
+
+##Запуск и завершение потока
+
+Потоки создаются функцией pthread_create, имеющей следующую сигнатуру:
+int pthread_create (pthread_t* tid, pthread_attr_t* attr,
+void*(*function)(void*), void* arg)
+#Данная функция определена в заголовочном файле <pthread.h>. Первый параметр этой функции представляет собой указатель на переменную типа pthread_t, которая служит идентификатором создаваемого потока. Второй параметр – указатель на переменную типа pthread_attr_t – используется для установки атрибутов потока. Третьим параметром функции pthread_create должен быть адрес функции потока. Эта функция играет для потока ту же роль, что функция main для главной программы. Четвертый параметр функции pthread_create имеет тип void*. Этот параметр может использоваться для передачи значения в функцию потока. Вскоре после вызова pthread_create функция потока будет запущена на выполнение параллельно с другими потоками программы.
+![](321.jpg)
+#Функции синхронизации потоков с использованием мьютексов
+
+Для синхронизации потоков с использованием мьютексов используются следующие основные функции:
+*pthread_mutex_init – инициализирует взаимоисключающую блокировку;
+*pthread_mutex_destroy – удаляет взаимоисключающую блокировку;
+*pthread_mutex_lock – устанавливает блокировку. В случае, если блокировка была установлена другим потоком, *текущий поток останавливается до снятия блокировки другим процессом;
+*pthread_mutex_unlock – снимает блокировку.
+
+Источники
+1)https://studfile.net/
+2)https://habr.com/ru