![]() |
|
Модераторы: xvr |
![]()
|
|
| mephis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 16.2.2012 Репутация: нет Всего: нет |
да, оно так и есть. проблема в том, что, когда использую number в threadFunction, он уже приходит не со своим значением, а number+1. то есть получается у меня так, что number каким-то образом инкрементируется раньше, чем нужно и в threadFunction он уже попадает инкрементированным. поэтому на первой итерации у меня стартует не 0-й таймер, а 1-й. на последней итерации получаю сегфолт, т.к. number на 1 выше, чем моё количество таймеров. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
тогда тебе нужно не -
а - тогда когда запустилась функция потока. и почему number не инкрементировать в функции потока? |
|||
|
||||
| mephis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 16.2.2012 Репутация: нет Всего: нет |
пробовал раньше, до исправления с барьером, ничего не менялось. приду с работы, попробую сделать так ещё раз. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 16 Всего: 110 |
в функцию потока передай указатель на number. в ней, разыменовываешь его, и инкрементируешь.
|
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
вот тут
может быть что счетик увеличиваеться до вызова threadFunction, может быть и нет, но это решает OS програмист на это повлиять не может, boostcoder барьер тут не поможет, с передачай указателя да , cчетчик должен быть внутри threadFunction - это просто логичнее, поговорка есть на такой случай , "При правильном дизайне программа пишеться сама " Это сообщение отредактировал(а) sergioK1 - 9.5.2012, 08:07 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Вынесите number из Deamon вообще, и передавайте его отдельной структурой (вместе с this) на куче:
Тогда барьеры не нужны |
|||
|
||||
| mephis |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 16.2.2012 Репутация: нет Всего: нет |
так и сделал. всё работает. всем спасибо за помощь. |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Кстати, если у вас это не учебная задача, и критично быстродействие при запуске thread'ов, то у этого подхода есть маленький недостаток. На каждое создание thread'а будет вызванна пара new/delete. Этого можно избежать заранее выделив массив из структур Data и передавая в создаваемый thread указатели на элементы этого массива по очереди (только надо внимательно следить за индексом элемента, что бы он не вышел за границы массива и не наложился на все еще используемые элементы) |
|||
|
||||
| mephis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 16.2.2012 Репутация: нет Всего: нет |
задача не учебная. и если будут присутствовать 1000 и больше thread-ов, то проблемы быстродействия сразу скажутся. программа должна работать в реальном времени с постоянно меняющимися данными в БД, поэтому каждое промедление будет критично и может привести к сбою. благодарю за замечание, я это обязательно учту. |
|||
|
||||
| sergioK1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 30.1.2011 Репутация: нет Всего: нет |
1000 средов на одной машине ? так может подумать о threadPool |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |