Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильное использование мьютекса 
V
    Опции темы
azesmcar
Дата 18.11.2010, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата(Игорь1024 @  18.11.2010,  09:33 Найти цитируемый пост)
И кстати рантайм ошибка вылезает, если использую крит.секцию. (даже если 1 раз инициализирую).

что-то не то делаешь или не там вылетает, посмотри дебагером.
Код

CRITICAL_SECTION ps;

DWORD WINAPI Get_N_P(LPVOID p)
{
    EnterCriticalSection(&ps);

    // do something

    LeaveCriticalSection(&ps);
    return 0;
}

int main()
{
    InitializeCriticalSection(&ps);
    // ...
}


Цитата(Игорь1024 @  18.11.2010,  09:33 Найти цитируемый пост)
А по-моему многопоточнось здесь совсем не помешает  

а зачем она? Каждый поток занимает по умолчанию 1мб стека + оверхед на синхронизацию и переключение контекста, a пользы в итоге - 0.

Цитата(Игорь1024 @  18.11.2010,  09:33 Найти цитируемый пост)
для каждого юзера есть поток-для приёма данных

ага..1000 пользователей - 1000 потоков smile 
Плохо Рихтера читаешь smile (смотри thread pool).

Это сообщение отредактировал(а) azesmcar - 18.11.2010, 09:47
PM   Вверх
Леопольд
Дата 18.11.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Цитата(Игорь1024 @  18.11.2010,  09:33 Найти цитируемый пост)
А по-моему многопоточнось здесь совсем не помешает 
Цитата(azesmcar @  18.11.2010,  07:33 Найти цитируемый пост)
в твоем конкретном случае прирост производительности - 0%.
Смысла в мьютексе тоже ноль, если сделать buf2 локальным. Мьютексы, в основном используются для синхронизации доступа к оbщим ресурсам (которые шарятся среди потоков). Чем меньше оbщих данных, тем лучше для отдельного потока. buf2 не настолько велик в размерах, и данные не шаряться. Чем bольше мьютексов, тем меньше производительность.

Теоретически, мьютекс може понадоbиться, когда один поток (или неcколько) зависит от результатьов другого.


Это сообщение отредактировал(а) Леопольд - 18.11.2010, 11:01


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Игорь1024
Дата 18.11.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



про пулы потоков я знаю, но пока не пользовался  smile . но как я уже сказал это - просто попрактиковаться.

попробую отладчиком. хотя код уже перепроверил по много раз... ладно,буду дальше ломать голову...

Ругается на InitializeCriticalSection().

Это сообщение отредактировал(а) Игорь1024 - 19.11.2010, 13:36
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
Игорь1024
Дата 19.11.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



Использовал OllyDbg.
Дошёл до места ошибки:

MOV DWORD PTR DS:[ECX+4],EAX

Access violation when writing to [адрес]

Насколько понимаю DS-регистр сегмента данных, будет указывать на начало секции .data ? Или я чего-то не понимаю?



--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
xvr
Дата 19.11.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Странный код:
Код

CRITICAL_SECTION ps;
DWORD WINAPI Get_N_P(LPVOID p)
{
    
    InitializeCriticalSection(ps);
Либо InitializeCriticalSection(&ps); (что правильно), либо PCRITICAL_SECTION ps; (что неправильно). А так, как написано не будет даже компилироваться

PM MAIL   Вверх
Игорь1024
Дата 19.11.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



Упс, в примере должно быть (забыл исправить):
CRITICAL_SECTION *ps;
у меня в коде насчёт этих указателей вё верно... 
уже исправил на 1 странице темы.
Всё компилируется, но ошибка... мда.

Это сообщение отредактировал(а) Игорь1024 - 19.11.2010, 15:09
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
azesmcar
Дата 19.11.2010, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата(Игорь1024 @  19.11.2010,  15:07 Найти цитируемый пост)
Упс, в примере должно быть (забыл исправить):
CRITICAL_SECTION *ps;

Ну так бы и сказал.

Цитата(xvr @  19.11.2010,  14:18 Найти цитируемый пост)
что неправильно

 smile 

смотри мой пример.
PM   Вверх
Игорь1024
Дата 19.11.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 11.5.2009
Где: Дальний Восток

Репутация: нет
Всего: нет



 smile 
блин, нужно же через CRITICAL_SECTION ps объявлять...
невнимательность....
тема закрыта.
--------------------
The God is real,unless he is declared as integer.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.