ForkThread презентация в формате PowerPoint - скачать бесплатно

Скачать презентацию на тему: "ForkThread" с количеством слайдов в размере 20 страниц. У нас вы найдете презентацию на любую тему и для каждого класса школьной программы. Мы уверены, что наши слайды помогут найти вам свою аудиторию. Весь материал предоставлен бесплатно, в знак благодарности мы просим Вас поделиться ссылками в социальных сетях и по возможности добавьте наш сайт MirPpt.ru в закладки.

Нажмите для просмотра
ForkThread

1:

2: Пример 2 Пример 2 signal(SIGCHLD,reaper); while(1) ssock accept(msock,(struct sockaddr )&fsin,&len); if(ssock 0);

3:

4: int pthreadcreate(pthreadt thread, pthreadattrt attr, void (startroutine)(void ), void arg); int pthreadcreate(pthreadt thread, pthreadattrt attr, void (startroutine)(void ), void arg); После создания нового потока в нем начинается выполняться функция (которая называется потоковой функцией), переданная параметром startroutine, причем ей самой в качестве первого параметра передается переменная arg. Параметр attr позволяет задать атрибуты потока (NULL для значений по умолчанию). thread -- адрес переменной, в которую pthreadcreate() записывает идентификатор созданного потока. Созданный с помощью pthreadcreate() поток будет работать параллельно с существующими. Возвращается 0 в случае успеха и не ноль -- в противоположном случае. Потоковая функция startroutine имеет прототип: void mythreadfunction(void ); Поскольку как параметр, так и ее возвращаемое значение -- указатели, то функция может принимать в качестве параметра и возвращать любую информацию.

5: Выполнение потока завершается в двух случаях: если завершено выполнение потоковой функции, или при выполнении функции pthreadexit(): Выполнение потока завершается в двух случаях: если завершено выполнение потоковой функции, или при выполнении функции pthreadexit(): void pthreadexit(void retval); которая завершает выполнение вызвавшего ее потока. Аргумент retval -- это код с которым завершается выполнение потока. При завершении работы потока вы должны помнить, что pthreadexit() не закрывает файлы и все открытые потоком файлы будут оставаться открытыми даже после его завершения, так что не забывайте подчищать за собой. Если вы завершите выполнение функции main() с помощью pthreadexit(), выполнение порожденных ранее потоков продолжится.

6: Потоки, как и порожденные процессы, по завершению работы сами по себе не освобождают ресурсы, занятые собой для личного пользования (а именно дескриптор и стек) :-) . Поэтому им необходимо помочь. Потоки, как и порожденные процессы, по завершению работы сами по себе не освобождают ресурсы, занятые собой для личного пользования (а именно дескриптор и стек) :-) . Поэтому им необходимо помочь. Варианта, собственно, два: либо на ряду с освобождением ресурсов какой-либо поток ждет его завершения, либо нет. Для первого варианта используем функцию pthreadjoin(): int pthreadjoin(pthreadt th, void threadreturn); которая приостанавливает выполнение вызвавшего ее процесса до тех пор, пока поток, определенный параметром th, не завершит свое выполнение и если параметр threadreturn не будет равен NULL, то запишет туда возвращенное потоком значение (которое будет равным либо PTHREADCANCELED, если поток был отменен, либо тем значением, которое было передано через аргумент функции pthreadexit()).

7: Для второго варианта есть функция pthreaddetach() : Для второго варианта есть функция pthreaddetach() : int pthreaddetach(pthreadt th); которая делает поток th "открепленным" (detached). Это значит, что после того, как он завершится, он сам освободит все занятые ним ресурсы. Обратите внимание на то, что нельзя ожидать завершения detached-потока (то есть функция pthreadjoin выполненная для detached потока завершится с ошибкой).

8: Cоздание потоков позволяет им совместно использовать некоторые ресурсы, но нужно производить контроль на предмет эксклюзивности доступа к этим ресурсам (нельзя допускать одновременной записи в одну переменную, например). Cоздание потоков позволяет им совместно использовать некоторые ресурсы, но нужно производить контроль на предмет эксклюзивности доступа к этим ресурсам (нельзя допускать одновременной записи в одну переменную, например). Такой контроль можно вести тремя способами через: взаимоисключающую блокировку условные переменные Семафоры

9: Первый вариант представляется самим набором функций библиотеки POSIX Threads. Взаимоисключающая блокировка представляется в программе переменной типа pthreadmutext. Первый вариант представляется самим набором функций библиотеки POSIX Threads. Взаимоисключающая блокировка представляется в программе переменной типа pthreadmutext. Для работы с ними существует 5 функций, а именно: int pthreadmutexinit(pthreadmutext mutex, const pthreadmutexattrt mutexattr); которая инициализирует блокировку, заданную параметром mutex. Соответственно, mutexattr -- ее атрибуты. Значение NULL соответствует установкам по умолчанию. int pthreadmutexdestroy(pthreadmutext mutex); удаляет блокировку mutex

10: int pthreadmutexlock(pthreadmutext mutex) int pthreadmutexlock(pthreadmutext mutex) устанавливает блокировку mutex. Если mutex не была заблокирована, то она его ее и немедленно завершается. Если же нет, то функция приостанавливает работы вызвавшего ее потока до разблокировки mutex, а после этого выполняет аналогичные действия. int pthreadmutexunlock(pthreadmutext mutex) снимает блокировку mutex. Подразумевается, что эта функция будет вызвана тем же потоком, который ее заблокировал (через pthreadmutexlock()). int pthreadmutextrylock(pthreadmutext mutex) ведет себя аналогично pthreadmutexlock() за исключением того, что она не приостанавливает вызывающий поток, если блокировка mutex установлена, а просто завершается с кодом EBUSY.

11: Поток выполнения представляет собой один из принципов организации отдельных вычислений, а один процесс может содержать от одного и более потоков. Поток выполнения представляет собой один из принципов организации отдельных вычислений, а один процесс может содержать от одного и более потоков. Новый поток может быть создан в любое время путем вызова функции pthreadcreate. Операционная система ограничивает максимально допустимое количество параллельных потоков, также как и максимальное количество параллельных процессов. Все потоки процесса разделяют единый набор глобальных переменных и единый набор дескрипторов файлов. Многопотоковые процессы обладают двумя основными преимуществами по сравнению с однопотоковыми процессами: более высокая эффективность и разделяемая память. Повышение эффективности связано с уменьшением издержек на переключение контекста.

12: Переключение контекста – Переключение контекста – это действия, выполняемые операционной системой при передаче ресурсов процессора от одного потока выполнения к другому. При переключении с одного потока на другой операционная система должна сохранить в памяти состояние предыдущего потока (например, значения регистров) и восстановить состояние следующего потока. Потоки в одном и том же процессе разделяют значительную часть информации о состоянии процесса, поэтому операционной системе приходится выполнять меньший объем работы по сохранению и восстановлению состояния. Вследствие этого переключение с одного потока на другой в одном и том же процессе происходит быстрее по сравнению с переключением между двумя потоками в разных процессах.

13: Второе преимущество потоков (разделяемая память), является более важным, чем повышение эффективности. Второе преимущество потоков (разделяемая память), является более важным, чем повышение эффективности. Потоки упрощают разработку параллельных серверов, в которых все копии сервера должны взаимодействовать друг с другом или обращаться к разделяемым элементам данных. В частности, поскольку ведомые потоки в сервере совместно используют глобальную память. Одним из недостатков потоков является то, что они имеют общее состояние процесса, поэтому действия, выполненные одним потоком, могут повлиять на другие потоки в том же процессе. Например, если два потока попытаются одновременно обратиться к одной и той же переменной, они могут помешать друг другу. API-интерфейс потоков предоставляет функции, которые могут использоваться потоками для координации работы.

14: Еще один недостаток связан с отсутствием надежности. Еще один недостаток связан с отсутствием надежности. Если одна из параллельно работающих копий однопотокового сервера вызовет серьезную ошибку (например, в ней будет выполнена ссылка на недопустимую область памяти), то операционная система завершит только тот процесс, который вызвал ошибку. С другой стороны, если серьезная ошибка будет вызвана одним из потоков многопотокового сервера, то операционная система завершит весь процесс (т. е. все потоки этого процесса).

15: struct pthreadmutext stmutex; / Разделяемая переменная / struct pthreadmutext stmutex; / Разделяемая переменная / GLOBAL; int main() pthreadt th; pthreadattrt ta; / Создаем ведущий сокет, привязываем его к общепринятому порту и переводим в пассивный режим / pthreadattrinit(&ta); pthreadattrsetdetachstate(&ta, PTHREADCREATEDETACHED); pthreadmutexinit(&GLOBAL. stmutex,0); while (1) ssock accept(msock, (struct sockaddr )&fsin, &len); if (ssock

16: Аргумент attr содержит атрибуты, присваиваемые вновь создаваемому потоку. Значение аргумента может быть равно NULL, если новый поток должен использовать атрибуты, принятые системой по умолчанию, или адрес объекта содержит атрибуты. Объект, содержащий атрибуты, может быть связан с несколькими потоками. Аргумент attr содержит атрибуты, присваиваемые вновь создаваемому потоку. Значение аргумента может быть равно NULL, если новый поток должен использовать атрибуты, принятые системой по умолчанию, или адрес объекта содержит атрибуты. Объект, содержащий атрибуты, может быть связан с несколькими потоками. Функция pthreadattrinit создает объект, содержащий атрибуты, а функция phreadattrdestroy удаляет такой объект: include Int pthreadattrinit(pthreadattrt attrp); Int pthreadattrdestroy(pthreadattrt attrp); Атрибуты объекта, созданного функцией pthreadattrinit, можно проверить функцией pthreadattrget, или установить функцией pthreadattrset . Например, состояние отсоединения API для проверки - pthreadattrgetdetachstate API для установки - pthreadattrsetdetachstate

17: include include include include include include include define NTHRDS 2 / К этим ресурсам мы можем получить доступ из потока / char words800020; // Словарь int current, maxw; char foundpass; // Флажок pthreadmutext mutexpass, mutexfound; / Блокировки / void passhack(void hash) int main(int argc, char argv) char i, pass; FILE passfile;

18: pthreadt thrdsNTHRDS; // Потоки pthreadt thrdsNTHRDS; // Потоки pass (char )malloc(35); pthreadmutexinit(&mutexpass, NULL); / Инициализация блокировок / pthreadmutexinit(&mutexfound, NULL); strcpy(pass, argv1); / Читаем словарь в память / strcpy(pass, argv1); / Читаем словарь в память / passfile fopen(argv2, "r"); maxw 0; while (!feof(passfile)) fgets(wordsmaxw, 20, passfile); fclose(passfile); foundpass 0; / Запускаем потоки / for (i0;i NTHRDS;i) pthreadcreate(&thrdsi, NULL, passhack, (void ) pass); / И ждем завершения их работы / for (i0;i NTHRDS;i) pthreadjoin(thrdsi, NULL); / Освобождаем блокировки / pthreadmutexdestroy(&mutexpass); pthreadmutexdestroy(&mutexfound); return 0;

19: Аргумент attr содержит атрибуты, присваиваемые вновь создаваемому потоку. Значение аргумента может быть равно NULL, если новый поток должен использовать атрибуты, принятые системой по умолчанию, или адрес объекта содержит атрибуты. Объект, содержащий атрибуты, может быть связан с несколькими потоками. Аргумент attr содержит атрибуты, присваиваемые вновь создаваемому потоку. Значение аргумента может быть равно NULL, если новый поток должен использовать атрибуты, принятые системой по умолчанию, или адрес объекта содержит атрибуты. Объект, содержащий атрибуты, может быть связан с несколькими потоками. Функция pthreadattrinit создает объект, содержащий атрибуты, а функция phreadattrdestroy удаляет такой объект: include Int pthreadattrinit(pthreadattrt attrp); Int pthreadattrdestroy(pthreadattrt attrp);

20: Атрибуты объекта, созданного функцией pthreadattrinit, можно проверить функцией pthreadattrget, или установить функцией pthreadattrset . Атрибуты объекта, созданного функцией pthreadattrinit, можно проверить функцией pthreadattrget, или установить функцией pthreadattrset . Например, состояние отсоединения API для проверки - pthreadattrgetdetachstate API для установки - pthreadattrsetdetachstate правила планирования API для проверки - pthreadattrgetschedpolicy API для установки – pthreadattrsetschedpolicy Правила планирования задают, среди прочего, приоритет потока Параметры планирования API для проверки - pthreadattrgetschedparam API для установки - pthreadattrsetschedparam Второй аргумент в pthreadattrgetschedparam и pthreadattrsetschedparam – это адрес переменной типа struct schedparam . В этой переменной есть целочисленное поле schedpriority, в котором задается приоритет любогопотока, обладающего этим свойством.

Скачать презентацию


MirPpt.ru