Потоки в Linux, C |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Потоки в Linux, C |
*оля* |
14.06.2011 20:33
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
здравствуйте.
Нужно сделать задание, но сколько ни читаю, никак не приходит понимае что же все-таки и как нужно сделать. само задание : Поиск слова, в нескольких текстовых файлах; 1)Выполнить задание последовательным алгоритмом; 2)Выполнить задание параллельным алгоритмом (обязательно использовать для разграничения общих ресурсов системные объекты синхронизации); 3)Сделать анализ быстродействия последовательного и параллельного алгоритмов. буду очень благодарна, если кто-нибудь объяснит как делать. |
IUnknown |
14.06.2011 20:54
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Используешь, скажем, pthread... Пишешь функцию потока, которая открывает один файл, и шерстит его в поисках заданного слова. Потом создаешь несколько таких потоков, каждому из которых передаешь свое имя файла, и пускай каждый поток занимается своей работой. Это будет параллельное выполнение. А потом, для теста, делаешь обработку всех файлов одной и той же функцией, в цикле. И сравниваешь скорости.
Только вот тогда непонятно, о каких объектах синхронизации речь. Если каждый файл обрабатывается своим потоком, и никакие другие потоки в этот процесс (и в этот же файл) не лезут - то никаких проблем быть не может, и не нужны тут никакие синхронизации в принципе. Непонятно. Может, у тебя задан какой-то конкретный алгоритм поиска, который внутри одного файла тоже можно распараллелить (разбросать на несколько потоков)? |
*оля* |
14.06.2011 21:21
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
Используешь, скажем, pthread... Пишешь функцию потока, которая открывает один файл, и шерстит его в поисках заданного слова. Потом создаешь несколько таких потоков, каждому из которых передаешь свое имя файла, и пускай каждый поток занимается своей работой. Это будет параллельное выполнение. А потом, для теста, делаешь обработку всех файлов одной и той же функцией, в цикле. И сравниваешь скорости. Только вот тогда непонятно, о каких объектах синхронизации речь. Если каждый файл обрабатывается своим потоком, и никакие другие потоки в этот процесс (и в этот же файл) не лезут - то никаких проблем быть не может, и не нужны тут никакие синхронизации в принципе. Непонятно. Может, у тебя задан какой-то конкретный алгоритм поиска, который внутри одного файла тоже можно распараллелить (разбросать на несколько потоков)? неа, конкретный алгоритм поиска не задан. ну, если посмотреть пример :
то нужно части, где выводятся а и в поменять на алгоритм поиска слова в 1 и 2 файле? а можно немного прокомментировать где что делается? |
IUnknown |
14.06.2011 22:02
Сообщение
#4
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
int main(void) |
*оля* |
14.06.2011 22:05
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
int main(void) спасибо. стало немного понятнее а как будет выглядеть параллельный алгоритм для этого же примера тогда? |
IUnknown |
14.06.2011 22:41
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Это и есть параллельный, основной поток и дополнительно созданный будут выполняться одновременно. Последовательный - это без создания thread, просто сначала выведи 20 раз "a", а потом - 20 раз "b"
|
*оля* |
15.06.2011 12:49
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 125 Пол: Женский Репутация: 1 |
Это и есть параллельный, основной поток и дополнительно созданный будут выполняться одновременно. Последовательный - это без создания thread, просто сначала выведи 20 раз "a", а потом - 20 раз "b" т.е. это будет выглядеть так?
|
IUnknown |
15.06.2011 13:51
Сообщение
#8
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Для того, чтобы запустить одновременный поиск в двух файлах, не нужно дублировать один и тот же код дважды. Достаточно сделать так:
#include <stdio.h>Если не сделать махинаций с stop_access, то получишь разные причудливые сообщения (буквы перемешаются между собой, скажем, первая - из первого потока, потом две - из второго, потом 4 опять из первого, и т.д... Чтобы это предотвратить - запрещаем вывод, пока кто-то другой выводит свою информацию... Это гарантирует корректное отображение... Сообщение отредактировано: IUnknown - 15.06.2011 13:52 |
Текстовая версия | 29.04.2024 15:23 |