Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. D. обобщение, сравнение анализ ,синтез
  2. II Разновидности производственных процессов
  3. III Принципы организации производственных процессов
  4. III. Организация и проведение натуральных обследований структуры и интенсивности автотранспортных потоков на основных автомагистралях
  5. LINUX|| Реализация потоков в ОС Linux.
  6. O Подвижность нервных процессов
  7. Алгоритм тестирования НГМД методом записи-чтения со сравнением.
  8. Анализ существующих процессов проектирования
  9. Аппаратурное оформление мембранных процессов

Изучите работу четырех программ, 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? Для ответа на этот вопрос выполните еще три эксперимента без механизма мьютексов. В первом эксперименте удалите цикл полностью. Во втором эксперименте уменьшите продолжительность цикла в два раза по сравнению с начальной версией программы. В третьем эксперименте увеличьте продолжительность цикла в два раза по сравнению с начальной версией программы. Запишите и объясните результаты экспериментов.




Дата добавления: 2014-12-18; просмотров: 200 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав