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

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

16.10.2014, 23:37. Показов 3468. Ответов 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,876
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,876
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,876
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
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru