4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325

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

16.10.2014, 23:37. Показов 3395. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru