Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325

Синхронизации многопоточности

16.10.2014, 23:37. Показов 3365. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день, пытаюсь сделать синхронизацию потом на примере producer\consumer, но что-то не выходит, я в consumere сделал ожидания установки сигнала, а в продюсере убрал установку сигнала, но второй потом всеравно выполняется, вот мой код, подскажите может я что нитак понимаю или же где ошибка
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
#include <iostream>
#include <thread>
#include <mutex>
#include <windows.h>
std::mutex mutex;
HANDLE event;
static int g_x=0;
//tread 1
DWORD WINAPI producer(LPVOID param)
{
    for(int i=0;i<100;++i)
    {
        
        {
            mutex.lock();
            g_x=i;        
           // SetEvent(event);
            mutex.unlock();
        }
    }
    return 0;
}
//thread 2
DWORD WINAPI consumer(LPVOID param) 
{
    for(int i=0;i<100;++i)
    {
        if(WaitForSingleObject(event,INFINITE))//тут же по идее потом должен не выполнятся пока не будет установлен event, а он всеравно делается
        {
            std::cout<<g_x<<"\n";
            ResetEvent(event);
        }
    }
    return 0;
}
void main()
{
     DWORD t1;
     DWORD t2;
     CreateThread(NULL, NULL, producer, NULL, NULL, &t1);    
     CreateThread(NULL, NULL, consumer, NULL, NULL, &t2);    
    
    system("pause");
}
Добавлено через 5 минут
чуть подправил код, а что у меня получалось продюсер изменял значения раньше слушателя, но всеравно нефурычит как надо
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
#include <iostream>
#include <thread>
#include <mutex>
#include <windows.h>
std::mutex mutex;
HANDLE event;
HANDLE event2;
static int g_x=0;
//tread 1
DWORD WINAPI producer(LPVOID param)
{
    for(int i=0;i<100;++i)
    {
        if(WaitForSingleObject(event2,INFINITE))
        {
            mutex.lock();
            g_x=i;        
            SetEvent(event);
            ResetEvent(event2);
            mutex.unlock();
        }
    }
    return 0;
}
//thread 2
DWORD WINAPI consumer(LPVOID param) 
{
    for(int i=0;i<100;++i)
    {
        if(WaitForSingleObject(event,INFINITE))//тут же по идее потом должен не выполнятся пока не будет установлен event, а он всеравно делается
        {
            std::cout<<g_x<<"\n";
            ResetEvent(event);
            SetEvent(event2);
        }
    }
    return 0;
}
void main()
{
     DWORD t1;
     DWORD t2;
     CreateThread(NULL, NULL, producer, NULL, NULL, &t1);    
     CreateThread(NULL, NULL, consumer, NULL, NULL, &t2);    
    
    system("pause");
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2014, 23:37
Ответы с готовыми решениями:

О многопоточности
Интересно, стало, а сколько всего потоков я могу открыть в своем проекте, существуют ли какие нибудь ограничения? и от чего зависит...

Производительность многопоточности
Доброго времени суток. Решил заняться многопоточностью, и натолкнулся на непонимание с производиельность Есть код в 2 потока: ...

изучение многопоточности
с чего стоит начать изучение многопоточности? есть базовые знания по С++, основы ООП. пытался читать Назарр К., Рихтер Дж. - Windows via...

32
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
17.10.2014, 02:29  [ТС]
Студворк — интернет-сервис помощи студентам
грустно, ну подскажите что можно сделать что бы он стал получше, просто "читать теорию" сильно розмыто как-то, вот читал и пока пришол только к етому, хоть скажите что вам ненравится, буду старатся найти другое решение, видел еще создание потока через _beginthread, лучше так сделать? куда хоть смотреть, а то нехочется начать делать, а оно будет все такое же....

Добавлено через 21 минуту
если так? получше будет? или всеравно одно и тоже....
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
#include "windows.h"
#include "iostream"
#include "process.h" 
#include <mutex>
static int g_x=0;
std::mutex _mutex;
HANDLE event,event2;
void producer(void *);
void consumer(void *);
void main()
{
    event=CreateEvent(NULL,TRUE,FALSE,NULL);
     event2=CreateEvent(NULL,TRUE,TRUE,NULL);
    _beginthread(producer,1024,NULL);       
    _beginthread(consumer,1024,NULL);   
}
void producer(void *)
{   
    for(int i=0;i<100;++i)
    {        
        if(WaitForSingleObject(event2,INFINITE)==WAIT_OBJECT_0)
        {
            _mutex.lock();
            g_x=i;        
            SetEvent(event);
            ResetEvent(event2);
            _mutex.unlock();
        }
    }
    _endthread();
}
void consumer(void *)
{
    for(;;)
    {  
        if(WaitForSingleObject(event,INFINITE)==WAIT_OBJECT_0)
        {
            std::cout<<g_x<<"\n";
            ResetEvent(event);
            SetEvent(event2);
        }
    }
    _endthread();
}
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
17.10.2014, 07:37
почитай вот это
http://www.cyberguru.ru/cpp/sy... page2.html
там есть про синхронизацию
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.10.2014, 20:45
ValeryS, Там MFC.

Что касается теории то как я помню у Рихтера есть про потоки.
1
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
17.10.2014, 20:49  [ТС]
ок, спасибо
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
17.10.2014, 21:50
Цитата Сообщение от Avazart Посмотреть сообщение
Там MFC.
ну и ????
что семафоры изменились или мьютексы?
функции другие, а принцип то один
я вообще одно из самых понятных описаний видел для RTOS
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.10.2014, 21:52
Цитата Сообщение от ValeryS Посмотреть сообщение
ну и ????
что семафоры изменились или мьютексы?
функции другие, а принцип то один
я вообще одно из самых понятных описаний видел для RTOS
Ну-ну, у человека бардак из std:: и WinApi а ты ему еще MFC, может еще в раздел Qt отправить, а че там мелочится ведь тоже самое?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
17.10.2014, 22:17
Цитата Сообщение от Avazart Посмотреть сообщение
у человека бардак из std:: и WinApi
ничего страшного не вижу, потом устаканится
знания нужно черпать везде
потом пропустить через себя, попробовать, тогда они навсегда
а если тупо копировать книги, боясь сделать шаг влево шаг вправо, ничего хорошего не выйдет
Сколько я видел краснодипломников, которые даже закон Ома применить не могут, хотя знают его назубок
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.10.2014, 22:22
Цитата Сообщение от ValeryS Посмотреть сообщение
Сколько я видел краснодипломников, которые даже закон Ома применить не могут, хотя знают его назубок
Я знаю кучу людей которые закончили ВУЗ, и не могут рассказать, не то что бы применить.

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а если тупо копировать книги, боясь сделать шаг влево шаг вправо, ничего хорошего не выйдет
Ну если лепить фигню то выйдет? Именно по этому эта тема и этот срач-код-стайл именно из-за не терпения и не желание прочитать и проработать хотя бы одну книгу нормально по теме.
Бардак в голове- бардак в коде.
0
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
17.10.2014, 22:27  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну если лепить фигню то выйдет?
имено по этому я попросил совета
Цитата Сообщение от Avazart Посмотреть сообщение
и этот срач-код-стайл именно из-за не терпения и не желание прочитать и проработать хотя бы одну книгу нормально по теме
желание есть
Цитата Сообщение от Avazart Посмотреть сообщение
Бардак в голове- бардак в коде.
имено по этому попросил сказать что можно изменить
Цитата Сообщение от итернал Посмотреть сообщение
хоть скажите что вам ненравится, буду старатся найти другое решение
но ответа небыло, если у меня небыло бы желания я бы сюда не обратился, ладно не вижу смысла спорить, спасибо всем за советы, буду трудится
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.10.2014, 22:33
Цитата Сообщение от итернал Посмотреть сообщение
имено по этому я попросил совета
Цитата Сообщение от итернал Посмотреть сообщение
но ответа небыло,
Ответ был : Читай книги.
Цитата Сообщение от итернал Посмотреть сообщение
желание есть
В чем проявляется ? В том что бы задавать глупые вопросы на формуме? Или может все таки читаем книги?
Цитата Сообщение от итернал Посмотреть сообщение
имено по этому попросил сказать что можно изменить
Не подлежит изменению, сразу и целиком в мусорку.
0
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
17.10.2014, 22:42  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Или может все таки читаем книги?
читаю
Цитата Сообщение от Avazart Посмотреть сообщение
Не подлежит изменению, сразу и целиком в мусорку.
хорошо, какая имено книга рихтера? есть несколько
эта? CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#
или тут Джеффри РИХТЕР. Windows для профессионалов
или же еще другая?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.10.2014, 22:58
Джеффри РИХТЕР. Windows для профессионалов, кажется, но явно не С# что очевидно.

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
можно из нового стандарта (С++11): Энтони Уильямс "Параллельное программирование на С++ в действии".
Ранее привели.

Добавлено через 12 минут
итернал, Кстати твой пример не от сюда случаем http://www.uhlib.ru/kompyutery... metkadoc23
1
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
17.10.2014, 23:09  [ТС]
нет, но есть что-то похожее, стоит целиком статью прочитать? просто вы мой код в мусорку отправили, а тут есть похожее немного или тут в целом получше чему меня написано? короче в любом случае поразбираюсь, а там будет видно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2014, 23:09

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

Сравнение многопоточности С++11 и WinAPI
У меня скорее теоретический вопрос, чем практический. Есть ли разница работы с многопоточностью в С++11, и, например в WinAPI?...

Реализация многопоточности в консоли
Доброго времени суток. Не могу разобраться в многопоточности. Реализовано перемещение по меню с помощью клавиш, и с помощью мыши. Надо...

Подскажите литературу о многопоточности!
Начинал читать QNX/UNIX Анатомия Параллелизма О.Цилюрик Е.Горошко, но там упор делается на QNX... Хотелось бы что-то связанное с...

Управление потоками в многопоточности
вопрос простой: что посоветуете почитать по теме для начинающего? с помощью чего проще реализовать? windows/linux? (нужно просто...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru