IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Потоки в Linux, C
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 125
Пол: Женский

Репутация: -  1  +


здравствуйте.
Нужно сделать задание, но сколько ни читаю, никак не приходит понимае что же все-таки и как нужно сделать.

само задание : Поиск слова, в нескольких текстовых файлах;
1)Выполнить задание последовательным алгоритмом;
2)Выполнить задание параллельным алгоритмом (обязательно использовать для разграничения общих ресурсов системные объекты синхронизации);
3)Сделать анализ быстродействия последовательного и параллельного алгоритмов.

буду очень благодарна, если кто-нибудь объяснит как делать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Для того, чтобы запустить одновременный поиск в двух файлах, не нужно дублировать один и тот же код дважды. Достаточно сделать так:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

/* Это в принципе не нужно теперь, можно убрать... */
static void wait_thread(void)
{
time_t start_time = time(NULL);

while (time(NULL) == start_time)
{
/**/
}
}

int stop_access = 0;

static void *thread_func(void *vptr_args)
{
while(stop_access) /* Ждем, пока другой поток, возможно выводит свое сообщение */
{
}

/* Потом блокируем вывод и выводим сообщение ЭТОГО потока */
stop_access = 1;
printf(" %s\n", (char*)vptr_args);
stop_access = 0; /* Выведено, можно разблокировать */

/* Тут реализуешь свой поиск... */
return NULL;
}

int main(void)
{
pthread_t first_thread, second_thread;
char *fn_1 = "file_1.txt\0";
char *fn_2 = "file_2.txt\0";

if (pthread_create(&first_thread, NULL, thread_func, (void*)fn_1) != 0)
{
return EXIT_FAILURE;
}
if (pthread_create(&second_thread, NULL, thread_func, (void*)fn_2) != 0)
{
return EXIT_FAILURE;
}

/* Теперь ждем завершения обоих потоков */

if (pthread_join(first_thread, NULL) != 0)
{
return EXIT_FAILURE;
}
if (pthread_join(second_thread, NULL) != 0)
{
return EXIT_FAILURE;
}

return EXIT_SUCCESS;
}

Если не сделать махинаций с stop_access, то получишь разные причудливые сообщения (буквы перемешаются между собой, скажем, первая - из первого потока, потом две - из второго, потом 4 опять из первого, и т.д... Чтобы это предотвратить - запрещаем вывод, пока кто-то другой выводит свою информацию... Это гарантирует корректное отображение...

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.05.2024 15:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name