![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Agentx86 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 27.4.2006 Репутация: нет Всего: нет |
Суть задания такова. Есть очередь в которую может писать неограниченное колличество потоков. И есть двадцать потоков которые обрабатывают эту очередь. Синхронизацию нужно сделать при помощи критических секций. Думаю как лучше организовать очередь. Есть мысль сделать вектор. Потоки которые считыают данные просто читают первый элемент вектора. Потом удаляют его. Я так понимаю перед тем как читать данные поток входит в критическую секцию, читает первую строку, удаляет её и выходит из критической секции. У меня возникает вопрос по поводу использования вектора. Может ли использование вектора повлиять на скорость работы программы(в худшую сторону)? Какой способ рыботы с очередью окажется самым быстрым?
|
|||
|
||||
asd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 25.6.2006 Репутация: 1 Всего: 1 |
Это задание в институте? Тогда вам нужна _очередь_ а не вектор, если понимать буквально. С критическими секциями всё просто. перед тем как что-то делать с очередью надо вызвать EnterCriticalSection, и потом не забыть сделать LeaveCriticalSection. Так же перед использованием критической секции в первый раз следует вызвать InitializeCriticalSection, иначе получите исключение при вызове EnterCriticalSection. Это сообщение отредактировал(а) asd - 4.6.2009, 15:05 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Вам нужен не std::vector а std::deque
Еще вам нужен семафор для синхронизации потоков чтения и записи, что бы потоки чтения не висели в цикле на очереди, ожидая что в нее упадут данные |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
работать конечно на списках будет быстрее, т.к. тут потребуются вставки и удаления элементов на концах очереди, да и произвольный доступ к ее элементам не нужен -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Agentx86 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 27.4.2006 Репутация: нет Всего: нет |
Большое спасибо за то что объснили по поводу очередей. Семафор мне не нужен. Просто здесь я описал часть задания. И может показаться, чтото не так. В реальности это клиент-серверное приложение. Когда приходит от клиента сообщение. Создается новый поток. Делается вход в критическую секцию. Добавляется в очередь строка. Выход из критической секции. Завершение этого потока. т.е. каждое присланное сообщение от клиента это отдельный поток. А чтение сервером очереди можно делать только тогда, когда длина очереди больше нуля. Это сообщение отредактировал(а) Agentx86 - 4.6.2009, 15:38 |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А как сервер узнает, что длинна очереди больше нуля? Он будет ее постоянно сканировать? Вот для того, что бы постоянно не сканировать и нужен семафор. |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
![]() |
|||
|
||||
Agentx86 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 27.4.2006 Репутация: нет Всего: нет |
Чувствую прийдется согласиться(по поводу семафора). Всем спасибо за помощь. Избавлюсь от нескольких граблей при разработке приложения.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |