0 / 0 / 0
Регистрация: 27.02.2016
Сообщений: 71

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

31.12.2019, 22:17. Показов 1334. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru