Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2012, 13:21   #1
Sonny01
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 49
По умолчанию Мьтекс. Синхронизация 2-х потоков.

Всем привет. Кто пожалуйста может посмотреть правильно ли синхронизированы 2 потока?
Почему-то если закомментить в потоках строчки:
Код:
WaitForSingleObject(Form1->mutex, INFINITE);
ReleaseMutex(Form1->mutex);
То потоки отображаются с Листбоксах одновременно. И вроде бы как и должно быть.
Иногда бывает идут ровно, но раз через раз первый проскакивает быстрее, потом опять.

Если их раскомментить, то ничего помоему не меняется результаты иногда отображаются немного в разнобой, 1-й поток меняется быстрее.

Насколько я понимаю, в идеале меняться должны одновременно.

В чем проблема?
Спасибо.
Вложения
Тип файла: rar Прога.rar (431.4 Кб, 14 просмотров)

Последний раз редактировалось Sonny01; 16.10.2012 в 13:32.
Sonny01 вне форума Ответить с цитированием
Старый 16.10.2012, 13:57   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Просто у вас мало данных, вот и не можете увидеть разницу когда потоки идут вперемежку и когда ожидают друг друга.
waleri на форуме Ответить с цитированием
Старый 16.10.2012, 14:07   #3
Sonny01
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 49
По умолчанию

А вообще с точки зрения синхронизации с помощью мьтекса они правильно работают? сделано правильно? Я немогу понять почему происходят такие проскоки, то всё выводится одновременно, и иногда бывает проскакивает 1-й поток а синус отстаёт на 1 шаг, потом выравниваются это может быть и в середине, может и в начале работы...

Последний раз редактировалось Sonny01; 16.10.2012 в 14:29.
Sonny01 вне форума Ответить с цитированием
Старый 16.10.2012, 14:40   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Да, вроде все правильно, но я же не знаю цели... эти два потока по очереди добавляют свои данные в список. Если это то, что нужно, то значит все в порядке
waleri на форуме Ответить с цитированием
Старый 16.10.2012, 14:51   #5
Sonny01
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 49
По умолчанию

да это и есть цель 1 поток генерит 10 чисел в лискбокс1, 2-й поток считает синус этих 10 чисел и выводит в листбокс2. с этим проблем никаких. Но почему они работают иногда одинаково, а иногда (при этом никаких изменений в коде небыло) новые числа выводятся быстрее чем их синус! т.е. на каждой следующей генерации чисел выводится синус предидущей генерации. Причем иногда 2-й поток выводит сразу синус. А иногда все нули опять таки при одинаковом коде.

Последний раз редактировалось Sonny01; 16.10.2012 в 15:22.
Sonny01 вне форума Ответить с цитированием
Старый 16.10.2012, 15:35   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Неа, не верно с точки зрения применения синхронизации. Synchronize(Do); - передаёт управление главному потоку (самой программе), и использование мьютексов в данном случае бессмысленно, т.к. они блокируют доступ для других потоков, но другие потоки и так остановлены, т.к. одновременное выполнение Synchronize невозможно.
eoln вне форума Ответить с цитированием
Старый 16.10.2012, 16:02   #7
Sonny01
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 49
По умолчанию

т.е. использования либо мьютекстов, либо крит. секции вообще бессмыслено и можно не использовать, когда используется синхронайз?
Sonny01 вне форума Ответить с цитированием
Старый 16.10.2012, 16:08   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Да, использовать надо что-то одно. В данном случае без синхронайза не обойтись, т.к. потоки с формой контактируют.
eoln вне форума Ответить с цитированием
Старый 16.10.2012, 17:46   #9
Sonny01
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 49
По умолчанию

А ещё один такой вопрос, изменится ли скорость выполнения потока с изменением его приоритета, и какой приоритет у потока по умолчанию при создании?
Sonny01 вне форума Ответить с цитированием
Старый 16.10.2012, 18:01   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

В теории да, на практике в этом редко есть смысл. Если у вас загрузка процесора не 100% то и не парьтесь.
waleri на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация потоков добрый_фей Помощь студентам 5 09.12.2011 19:57
Синхронизация потоков alenka_ej Помощь студентам 0 03.06.2010 22:20
Синхронизация потоков в С++ erazer89 Помощь студентам 0 27.04.2010 20:14
синхронизация потоков m_kostik Win Api 0 26.03.2010 23:56