![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Синхронизирую потоки (пытаюсь, по крайней мере..);
Использовал мьютекс. Написал в таком виде:
Хех, не работает. Что я делаю не так? --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
В виндоуз немного напутали с терминологией ![]() На самом деле тут тебе мьютекс не нужен (точнее нужен, но не виндоузовский). Классический мьютекс микрософт обозвала критической секцией, вот ее и используй.
Смотри пример ![]() http://msdn.microsoft.com/en-us/library/ms686927(VS.85).aspx Добавлено @ 16:17
... и не забывай про безопасность исключений. кстати, почему не boost? Это сообщение отредактировал(а) azesmcar - 17.11.2010, 16:21 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
а почему С++ ? второй раз за седня пишу подобное.. Это сообщение отредактировал(а) mes - 17.11.2010, 16:24 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
хм.. но с чего решили, что у тс С++ ? Это сообщение отредактировал(а) mes - 17.11.2010, 16:27 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
||||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
мы в разделе C/C++.. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
я там пишу в файл.
знаю что можно чтоб сразу несколько потоков писали при помощи WriteFile, но интересно как сделать так. а с использованием кр.секц (я их сразу использовал-ошибки) вылетает с рантайм ошибкой (даже когда пишущий поток всего один). потому и попробовл мьютекс. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Игорь1024
Мьютекс - объект ядра и используется в основном для межпроцессорной синхронизации, для потоков достаточно критической секции, покажи проблемный код. |
|||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Здесь код для записи данных юзера (Та же функция, что и в моём прошлом посте... только решил синхронизировать, ведь пытаюсь написать небольшой чат).
Эту функцию вызывают несколько потоков (Сколько юзеров регится-столько и потоков). Про различие мьютексов и критических секций я знаю (спасибо Рихтеру ![]() Насчёт функции: функция вызывается каждый раз, когда юзер присылает данные при регистрации. (у меня для каждого юзера есть свой поток приёма сообщений (привязанный к сокету), если получаем сообщение на регестрацию-вызываем Get_N_P)
Это сообщение отредактировал(а) Игорь1024 - 19.11.2010, 15:05 --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Инициализация должна выполняться один раз. Добавлено через 10 минут и 26 секунд Просто к сведению: в критической секции нужно выполнять минимум действий. Лень вдаваться в детали, но у тебя на первый взгляд много лишнего. Конкретно в твоем случае я вообще не вижу смысла в многопоточности, все равно ничего параллельно не выполняется. Как только один поток войдет в критическую секцию остальные будут покорно ждать его завершения, так зачем вообще потоки? Если решил заняться параллельным программирование, то для начала надо понять когда их вообще стоит использовать. Основные цели для использования многопоточности - логическое разделение и повышение производительности. У большинства людей на сегодняшний день стоит многоядерные процессоры, и для того, чтобы использовать всю мощь этих компьютеров нужно писать программу с учетом этого. Еслибы все было идеально и задачу можно было бы действительно разделить на две отдельные задачи то на 2х процессорной машине можно было бы получить 100% прирост производительности, но это не часто бывает. Подробнее смотри Закон Амдала, в твоем конкретном случае прирост производительности - 0%. Добавлено через 14 минут и 36 секунд mes и все таки это C++ ![]() |
|||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
А по-моему многопоточнось здесь совсем не помешает
![]() И кстати рантайм ошибка вылезает, если использую крит.секцию. (даже если 1 раз инициализирую). 0xC0000005: Access violation writing location 0x00000004. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |