рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

II. Сравнение потоков и процессов

II. Сравнение потоков и процессов - раздел Компьютеры, Потоки в ОС Linux Изучите Работу Четырех Программ, Makefile, Simple.c...

Изучите работу четырех программ, makefile, simple.c, simple_processes.c, simple_threads.c, simple_mutex.c, приведенных в Приложении (Тексты программ и makefile содержатся в файле appendix.doc):

(a) Обычная программа simple.c, состоящая из функции main и двух дополнительных функций; не использует многозадачности или многопоточности.

(b) Программа simple_processes.c запускает три процесса - родительский и два дочерних.

(c) Программа simple_threads.c запускает три потока - главный (первичный) и два дочерних.

(d) Программа simple_mutex.c с тремя потоками, как в (с), и использующая мьютекс для синхронизации.

Программы (a), (b) и (c) выполняют одинаковые вычисления.

 

Задание 4.

4.1. Скопируйте файлы makefile, simple.c, simple_processes.c, simple_threads.c, simple_mutex.c в ваш каталог. Для создания исполняемых файлов всех четырех программ запустите утилиту make без параметров.

4.2. Запустите исполняемые файлы simple, simple_processes и simple_threads. Объясните полученные результаты.

4.3. Попытайтесь оценить время выполнения программ simple, simple_processes и simple_threads. Это можно сделать одним из двух способов:

1) Использовать в функции main всех трех программ функцию gettimeofday (не забудьте включить <sys/time.h>). Эту функцию следует включить в два места программы: до и после вызова двух функций в simple; до и после создания и запуска двух процессов/потоков в simple_processes/simple_threads. Для получения более точного результата исключите printf из функций do_one_thing и do_another_thing.

2) Использовать обычные часы. Для того чтобы программа выполнялась несколько минут, следует включить в main каждой программы цикл, повторяющийся не менее 32000 раз. Для получения более точного результата исключите printf из функций do_one_thing и do_another_thing.

Объясните разницу во времени работы трех программ.

4.4. Выполните программу simple_mutex. Проверьте, что переменная common (изменяемая параллельно двумя потоками), изменяет свою величину от 0 до 100 (т.к. каждый поток изменяет эту переменную ровно 50 раз). Обратите внимание, что в каждый момент времени переменная common читается, увеличивается на 1 и затем записывается без прерывания только одним потоком. Это обеспечивается механизмом мьютексов, который используется обоими потоками (см. функции pthread_mutex_lock и pthread_mutex_unlock).

4.5. Затем удалите механизм мьютексов из программы simple_mutex_c, перекомпилируйте ее и выполните несколько раз. Одинаковы ли значения common в разных запусках? Всегда ли переменная common имеет конечное значение, равное 100? Объясните результаты.

4.6. Между двумя последовательными чтением и записью common, каждый из двух потоков в программе simple_mutex.c выполняет длинный цикл. Каково влияние продолжительности этого цикла на переменную common? Для ответа на этот вопрос выполните еще три эксперимента без механизма мьютексов. В первом эксперименте удалите цикл полностью. Во втором эксперименте уменьшите продолжительность цикла в два раза по сравнению с начальной версией программы. В третьем эксперименте увеличьте продолжительность цикла в два раза по сравнению с начальной версией программы. Запишите и объясните результаты экспериментов.

– Конец работы –

Эта тема принадлежит разделу:

Потоки в ОС Linux

На сайте allrefs.net читайте: "Потоки в ОС Linux"

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: II. Сравнение потоков и процессов

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

I. Управление потоками
  Основная цель использования потоков - это разделение программы на подзадачи, которые могут выполняться параллельно. По сравнению с процессами взаимодействие и синхронизация потоков

Создание и завершение потоков
Создание потока. Поток создается функцией pthtead_create, имеющей 4 параметра: 1. Указатель на переменную типа pthread_t, в нее бу

Передача данных в поток
Т.к. тип аргумента, передаваемого в поток, - void*, то для передачи одного параметра типа intего следует преобразовать к типу (void*) (См.,

Объединение потоков
В случае потоков аналогом функции wait является функция pthread_join: поток, вызвавший эту функцию, будет ожидать завершения указанного потока. Функция возвращает

Вопросы
1. Что такое поток? Какова цель использования потоков в программах? 2. Какова разница между потоками и процессами? 3. Когда потоки могут выполняться действительно параллельно?

Источники информации
1. Митчел М., Оулдем Дж., Самьюэл А. Программирование для Linux. Профессиональный подход. - М.: Издательский дом "Вильямс", 2003. (Глава 4) (The original book (2001) is available at http:

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги