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

Синхронизация потоков для вычисления дисперсии

23.10.2017, 19:34. Показов 956. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Необходима помощь с решением задачи. Задача состоит в следующем:
1. Есть выражение (в моем случае это вычисление дисперсии(https://www.cyberforum.ru/cgi-bin/latex.cgi?\sigma =\frac{1}{2}\sum_{i=1}^{3} {(x[i]-\bar{x})}^{2}, где https://www.cyberforum.ru/cgi-bin/latex.cgi?\bar{x}=\frac{1}{3}\sum_{i=1}^{3}\, \; {x}_{i}). Т.е сначала идет сумма, потом деление, потом разность, потом возведение разностей в квадраты, сумма этих разностей,деление суммы).
2. Необходимо вычислить это выражение с помощью многопоточности, а именно, чтобы один поток выполнял, допустим, сложение, другой умножение, третий вычитание, четвертый деление,пятый возведение в квадрат.
3. Синхронизировать это дело с помощью мьютексов. Т.е. выполнить правильную последовательность действий в выражении.
4. Реализовать способ передачи данных между потоками с помощью очередей сообщений (msgbuf )

Все что я, к сожалению смог осилить, даже после прочтения многих источников, это потоки. Как работают мьютексы до сих пор не понимаю. Вот по идее код. В него надо бы(я считаю) добавить мьютексы да передачу сообщений.

Буду благодарен за помощь. Желательно подробную.

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
66
67
68
69
70
71
72
73
#include <stdlib.h> 
#include <stdio.h> 
#include <errno.h> 
#include <pthread.h> 
#include <unistd.h> 
#include <math.h>
 
 
    pthread_mutex_t mutex; //также я не понимаю сколько мьютексов должно быть
 
void *Addition() 
    {       
        while(1) 
            {    
                //mutex + вычисление сложения
                //вычисление суммы в правом выражении
                sum1=x1+x2+x3;
                //вычисление суммы в левом выражении
                sum2=pow1+pow2+pow3;
                
            }
    } 
 
void *Subtraction()
    {  
 
        while(1)  
            {  
                //mutex + вычисление разности
                //вычисление разности в скобках в левом выражении
                sum3=x1-xx;
                sum4=x2-xx;
                sum5=x3-xx;
            } 
    } 
 void *Division()
    {  
 
        while(1)  
            {  
                //mutex + вычисление деления
                //х среднее в правом выражении
                xx=sum1/3;
                //вычисление финальной сигмы в левом выражении
                sigma=sum2/2;
            } 
    } 
 void *Squaring()
    {  
 
        while(1)  
            {  
                //mutex + вычисление квадрата
                pow1=pow(sum3,2);
                pow2=pow(sum4,2);
                pow3=pow(sum5,2);
            } 
    } 
 
int main()
    {  
        pthread_t thread1, thread2, thread3, thread4; 
        pthread_mutex_init(&mutex, NULL); // также не знаю сколько мьютексов должно быть
        pthread_create(&thread1, NULL, &Addition, NULL); 
        pthread_create(&thread2, NULL, &Subtraction, NULL); 
        pthread_create(&thread3, NULL, &Division, NULL); 
        pthread_create(&thread4, NULL, &Squaring, NULL); 
        sleep(1);   
        pthread_cancel(thread1); 
        pthread_cancel(thread2); 
        pthread_cancel(thread3); 
        pthread_cancel(thread4); 
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.10.2017, 19:34
Ответы с готовыми решениями:

Синхронизация потоков в OC Linux
Здравствуйте. Помогите, пожалуйста, решить проблему. Решите классическую проблему «поставщик – потребитель» с использованием средств...

Синхронизация потоков, thread-safe usleep
Постановка задачи: Создать 2N+1 потоков. N потоков пишут в общий буфер (далее ОБ), N + 1 потоков читают из ОБ и печатают прочитанное....

Синхронизация потоков - найти ошибку в коде
не получается разрулить следующую ситуацию. дано: переменная. 2 треда. 1 поток рулит переменной. 2 поток может обращатся к...

1
 Аватар для peter_irich
369 / 225 / 53
Регистрация: 18.10.2017
Сообщений: 2,394
23.10.2017, 22:21
Когда мне когда-то потребовалось всему этому научиться, я взял книгу "Системное программирование в UNIX",
Кейт Хэвиленд, Файна Грэй, Бан Салама, ДМК, 2000г. и всё получилось. Найдите хорошую книгу
и делайте по образцу, а на форуме могут ответить на конкретный вопрос. Сейчас я попытаюсь приложить
одну из тех программ с примером потока. Вроде бы получилось загрузить zip. Странно, что не принимаются gz.
Вложения
Тип файла: zip cntrl6.zip (2.0 Кб, 3 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2017, 22:21
Помогаю со студенческими работами здесь

Синхронизация потоков без использования mutex
Была написана прога (в целях лабораторной работы) синхронизации потоков,на защиту дали переделать не используя mutex,используя симафоры...

Синхронизация потоков на элементарном уровне (переключение потоков)
в общем разбираюсь с потоками, на сколько понял мне нужен lock Вот имеется просто пример public void RunAdd() ...

Синхронизация потоков: проблема гонки потоков
Есть проблема в синхронизации потоков, которую я не знаю, как решить. Точнее у меня получается типичная гонка потоков. Есть функция,...

Синхронизация потоков
Есть класс class CFrameBufferObserver : public VsCoreLib::IFrameBufferObserver { VsCoreLib::IFrameBuffer* m_frame_buffer; ...

Синхронизация потоков с++
Реализовать модуль создающий 4 балансировочных потока обеспечивающий 100% загрузку CPU (A,B,C,D). Каждый поток должен выводить на консоль...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru