Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 27.02.2016
Сообщений: 71

Что такое параллельный алгоритм?

31.12.2019, 22:17. Показов 1346. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане!
помогите понять задание:
Вывод всех символов на экран.
Выполнить задание параллельным и последовательным алгоритмом. Обязательно использовать для разграничения общих ресурсов системные объекты синхронизации.
Сделать анализ быстродействия последовательного и параллельного алгоритмов.

Объявляю две функции - для примера пока что там выводится по одному символу.
Делаю два потока. Сначала выводит В1 потом В потом снова В1. Это правильно?

Что Дальше вообще делать?
Функция синхронизации потоков - pthread_mutex_lock().
Что получится - одна из функций потока будет заблокирована - производительность упадет. Нужно же наоборот, как я понимаю ускорить этот вывод.

На самом деле в задании поиск и подсчет всех символов в файле. Но эта часть в принципе не такая сложная но зато длинная - хочу на примере простых команд разобраться - что такое синхронизация общих ресурсов. Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
#include <locale.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/syscall.h>
 
void *threadFunc_1(void *args){
int *p=(int*)args;
int myNum = *p;
for(int i=0; i<20; i++)
{
puts("B1");
 
printf("threadFunc_1 %d\n", myNum);
//вывод идентификатора потока
printf("before calling pthread_create getpid: %i getpthread_self: %lu tid:%lu\n", getpid(), pthread_self(), syscall(SYS_gettid));
}
}
 
void *threadFunc(void *arg){
int i;
int loc_id=*(int*)arg;
for(int i=0; i<4; i++){printf("threadFunc %i is ranning\n", loc_id);
puts("B");
//вывод идентификатора потока
printf("before calling pthread_create getpid: %i getpthread_self: %lu tid:%lu\n", getpid(), pthread_self(), syscall(SYS_gettid));
}
}
 
int main(void)
{
int id1, id2, result;
pthread_t pthread1, pthread2;
id1=1;
result=pthread_create(&pthread1, NULL, threadFunc_1, &id1);
 
if(result != 0){perror("Create 1"); 
return EXIT_FAILURE;
}
else {printf("pthread 1\n");
}
for(int i=0; i<8; i++){
puts("a");
}
id2=2;
result=pthread_create(&pthread2, NULL, threadFunc, &id2);
if(result != 0){
perror("Create 2");
return EXIT_FAILURE;
}
else {printf("pthread 2\n");}
 
result=pthread_join(pthread1, NULL);
if (result != 0)
{perror("joining 1");
return EXIT_FAILURE;
}
 
printf("\n");
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.12.2019, 22:17
Ответы с готовыми решениями:

Что такое неэлементарный алгоритм?
Буду рад за любую информацию где об этом можно почитать.

Что такое алгоритм разработки приложения?
Скажите пожалуйста что такое Алгоритм разработки приложения.. И напишите любой пример.Спасибо.

Параллельный алгоритм Apriori
Уважаемые форумчане! Теперь у меня встал другой вопрос, как можно распараллелить алгоритм Априори?:scratch: Методы,способы и примеры...

1
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
05.01.2020, 02:06
Цитата Сообщение от NNNNNNNNN Посмотреть сообщение
Объявляю две функции - для примера пока что там выводится по одному символу.
И какие у них общие ресурсы?
Цитата Сообщение от NNNNNNNNN Посмотреть сообщение
Делаю два потока. Сначала выводит В1 потом В потом снова В1. Это правильно?
Не знаю. Из описанного задания не понятно, что конкретно нужно сделать.
Цитата Сообщение от NNNNNNNNN Посмотреть сообщение
На самом деле в задании поиск и подсчет всех символов в файле.
Как вариант: программа читает в буфер из файла, потом каждый из потоков подсчитывает кол-во символов в своей части буфера. По завершению работы, каждый поток обновляет данные по кол-ву символов в общей структуре (общий ресурс). И так до конца файла. Или можешь сами потоки заставить синхронизовано читать свои буферы из файла. Много способов можно придумать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2020, 02:06
Помогаю со студенческими работами здесь

Что такое приближенный алгоритм и в чем отличие от эвристического или жадного?
Правильно ли я понимаю, что приближенный алгоритм - это алгоритм, который всегда дает почти точное решение и его точность доказана, в то...

Параллельный алгоритм сложения матриц
Подскажите, как в коде C++ реализовать параллельный алгоритм сложения матриц?

Параллельный алгоритм технологии CUDA
Здравствуйте. Есть программа, в которой реализован алгоритм выделения контуров изображения 3х3, методами Собеля и Превитта. Необходимо...

Параллельный алгоритм быстрой сортировки (quicksort)
Как реализовать параллельный алгоритм быстрой сортировки на C++? Необходимо в последовательном алгоритме быстрой сортировки...

Разработайте параллельный алгоритм вычисления матрицы
Данные матрицы А (размерностью 34х40) и В (размерностью 40х32) Разработайте параллельный алгоритм вычисления матрицы С = А * В-В * А .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru