vector и многопоточность
От: BioUnit Россия  
Дата: 21.04.03 14:20
Оценка:
Есть некоторый vector. Один поток добавляет элементы в его конец, а другой — выбирает из головы, т.е. своеобразная очередь. Понимаю, что вариантов синхронзации может быть множество, но среди этого разнообразия хотелось бы получить самый оптимальный, ведь задача то тривиальная.
Re: vector и многопоточность
От: TepMuHyc  
Дата: 21.04.03 14:24
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Есть некоторый vector. Один поток добавляет элементы в его конец, а другой — выбирает из головы, т.е. своеобразная очередь.


...Тогда не вектор, а список — у него время добавления/удаления константное.
Вот здесь ( http://www.rsdn.ru/Forum/Message.aspx?mid=27370&only=1
Автор: TepMuHyc
Дата: 07.02.02
) описание алгоритма очереди.
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re[2]: vector и многопоточность
От: BioUnit Россия  
Дата: 21.04.03 14:39
Оценка:
Здравствуйте, TepMuHyc, Вы писали:

TMH>Здравствуйте, BioUnit, Вы писали:


BU>Есть некоторый vector. Один поток добавляет элементы в его конец, а другой — выбирает из головы, т.е. своеобразная очередь.


TMH>...Тогда не вектор, а список — у него время добавления/удаления константное.

TMH>Вот здесь ( http://www.rsdn.ru/Forum/Message.aspx?mid=27370&only=1
Автор: TepMuHyc
Дата: 07.02.02
) описание алгоритма очереди.


Да, действительно, список лучше.
Но вот вопрос: когда в очереди одно задание, один поток начинает его выбирать, а другой поток в этот момент добавляет очередное задание. Не произойдет ли чего-нибудь непредвиденного?
Re[3]: vector и многопоточность
От: vvaizh http://izh-test.sourceforge.net/
Дата: 21.04.03 14:40
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Но вот вопрос: когда в очереди одно задание, один поток начинает его выбирать, а другой поток в этот момент добавляет очередное задание. Не произойдет ли чего-нибудь непредвиденного?


Общепринято такое делать внутри именованного мутекса (и поиск в очереди кстати тоже)!

Удалено избыточное цитирование. -- ПК.
http://izh-test.sourceforge.net/russian/introduction.html
Re: vector и многопоточность
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 21.04.03 14:42
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Есть некоторый vector. Один поток добавляет элементы в его конец, а другой — выбирает из головы, т.е. своеобразная очередь. Понимаю, что вариантов синхронзации может быть множество, но среди этого разнообразия хотелось бы получить самый оптимальный, ведь задача то тривиальная.


Встречный вопрос: выбор именно vector для организации этой очереди здесь окончательный?

Удаление элемента из начала вектора даст копирование почти всего содержимого на один эл-т к началу. Это и неоптимально по скорости и заставляет безусловно синхронизировать операции вставки и выемки элемента. Тут гораздо ближе либо deque (queue) либо list. Вопрос синхронизации останется и тут, но сама операция займет меньше времени и, соответственно, время простоя потока в ожидании доступа к очереди тоже сократится.
... << RSDN@Home 1.0 beta 6a >>
Re[4]: vector и многопоточность
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 21.04.03 14:47
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Общепринято такое делать внутри именованного мутекса (и поиск в очереди кстати тоже)!


Можно и неименованным обойтись...
... << RSDN@Home 1.0 beta 6a >>
Re[3]: vector и многопоточность
От: TepMuHyc  
Дата: 21.04.03 14:48
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Но вот вопрос: когда в очереди одно задание, один поток начинает его выбирать, а другой поток в этот момент добавляет очередное задание.


TMH>Не произойдет ли чего-нибудь непредвиденного?

Обязательно произойдет
Но, коль скоро то сообщение это была иллюстрацией работы с семафором, то эта малозначащая деталь была опущена
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re[4]: vector и многопоточность
От: TepMuHyc  
Дата: 21.04.03 14:50
Оценка:
Здравствуйте, vvaizh, Вы писали:


V>Общепринято такое делать внутри именованного мутекса

А почему именно "именованного"?

V>(и поиск в очереди кстати тоже)!

Поиск, простите, в чем ?????
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re[4]: vector и многопоточность
От: BioUnit Россия  
Дата: 21.04.03 14:50
Оценка:
Здравствуйте, TepMuHyc, Вы писали:

TMH>Здравствуйте, BioUnit, Вы писали:


BU>Но вот вопрос: когда в очереди одно задание, один поток начинает его выбирать, а другой поток в этот момент добавляет очередное задание.


TMH>Не произойдет ли чего-нибудь непредвиденного?

TMH>Обязательно произойдет
TMH>Но, коль скоро то сообщение это была иллюстрацией работы с семафором, то эта малозначащая деталь была опущена

Именно эта "малозначащая деталь" меня и беспокоит от начала топика.
Re[3]: vector и многопоточность
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 21.04.03 14:57
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Но вот вопрос: когда в очереди одно задание, один поток начинает его выбирать, а другой поток в этот момент добавляет очередное задание. Не произойдет ли чего-нибудь непредвиденного?


Лучше не расчитывать на это. Посмотри, что написали сами разработчики о потокобезопасности:

Thread-safety for SGI STL:

...
Client must lock shared mutable containers
...


Thread safety (STLPort):


Причем, это для любого контейнера...
... << RSDN@Home 1.0 beta 6a >>
Re[5]: vector и многопоточность
От: TepMuHyc  
Дата: 21.04.03 14:58
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Именно эта "малозначащая деталь" меня и беспокоит от начала топика.

Закрывать работу со списком мютексом надо ОБЯЗАТЕЛЬНО. Во избежание.
Причем именно мютексом а не Reader-Writer Lock'ом — т.к. и добавление и извлечение
элемента списка изменяет состояние этого списка.
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
Re[5]: vector и многопоточность
От: vvaizh http://izh-test.sourceforge.net/
Дата: 21.04.03 14:59
Оценка:
Здравствуйте, TepMuHyc, Вы писали:

TMH>Здравствуйте, vvaizh, Вы писали:



V>Общепринято такое делать внутри именованного мутекса

TMH>А почему именно "именованного"?
да, ошибся, вданном случае неименованный мутекс лучше хранить прямо рядом со списком/вектором..

V>(и поиск в очереди кстати тоже)!

TMH>Поиск, простите, в чем ?????
в контэйнере, или вы туда только класть хотите? а не читать?
http://izh-test.sourceforge.net/russian/introduction.html
Re[6]: vector и многопоточность
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 21.04.03 15:07
Оценка:
Здравствуйте, vvaizh, Вы писали:

TMH>>Поиск, простите, в чем ?????

V>в контэйнере, или вы туда только класть хотите? а не читать?

Чтобы прочитать первый элемент последовательного контейнера поиск не требуется. Или я что-то не понимаю?
... << RSDN@Home 1.0 beta 6a >>
Re[4]: vector и многопоточность
От: BioUnit Россия  
Дата: 21.04.03 15:10
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:

BU>Но вот вопрос: когда в очереди одно задание, один поток начинает его выбирать, а другой поток в этот момент добавляет очередное задание. Не произойдет ли чего-нибудь непредвиденного?


ММ>Лучше не расчитывать на это. Посмотри, что написали сами разработчики о потокобезопасности:


ММ>Thread-safety for SGI STL:

ММ>Thread safety (STLPort):

Именно с этого я и начал свои изыскания. И первично вопрос был как раз о том, как лучше организовать такую синхронизацию.
Видимо все склоняются к неименованному мьютексу...

Удалено избыточное цитирование. -- ПК.
Re[7]: vector и многопоточность
От: vvaizh http://izh-test.sourceforge.net/
Дата: 21.04.03 15:12
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:

ММ>Здравствуйте, vvaizh, Вы писали:


TMH>>Поиск, простите, в чем ?????

V>в контэйнере, или вы туда только класть хотите? а не читать?

ММ>Чтобы прочитать первый элемент последовательного контейнера поиск не требуется. Или я что-то не понимаю?



Какая разница, чтение лучше тоже в мутекс загнать, даже первого элемента!
Для вектора — обязательно!
Для списка — если будут операции удаления..

А.. ещё вариант, что читать ту будешь точно уже после того как всё заполнено.. тогда действительно всё чисто..
http://izh-test.sourceforge.net/russian/introduction.html
Re[5]: vector и многопоточность
От: vvaizh http://izh-test.sourceforge.net/
Дата: 21.04.03 15:13
Оценка:
BU>Видимо все склоняются к неименованному мьютексу...

Я предлагаю вынести это в голосование..
http://izh-test.sourceforge.net/russian/introduction.html
Re: vector и многопоточность
От: jazzer Россия Skype: enerjazzer
Дата: 21.04.03 17:22
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Есть некоторый vector. Один поток добавляет элементы в его конец, а другой — выбирает из головы, т.е. своеобразная очередь.


Вот и воспользуйся очередью (std:deque)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: vector и многопоточность
От: Дмитрий Наумов  
Дата: 22.04.03 06:54
Оценка:
Здравствуйте, TepMuHyc, Вы писали:

TMH>Здравствуйте, BioUnit, Вы писали:


BU>>Именно эта "малозначащая деталь" меня и беспокоит от начала топика.

TMH>Закрывать работу со списком мютексом надо ОБЯЗАТЕЛЬНО. Во избежание.
TMH>Причем именно мютексом а не Reader-Writer Lock'ом — т.к. и добавление и извлечение
TMH>элемента списка изменяет состояние этого списка.

В случае списка, во избежание падения перфоманса, можно лочить только три элемента — тот который удаляется/вставляется и два его соседа. К остальным элементам доступ на чтение в это время можно разрешать.
... << RSDN@Home 1.0 beta 6a >>
Re: vector и многопоточность
От: small_cat Россия  
Дата: 22.04.03 07:00
Оценка:
Здравствуйте, BioUnit, Вы писали:

Если это очередь — то лучше список. Ибо обращение к элементу означает также его удаление из очереди. Если это один процесс — то лучше юзать Critical Section
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[2]: vector и многопоточность
От: Дмитрий Наумов  
Дата: 22.04.03 07:03
Оценка:
Здравствуйте, small_cat, Вы писали:

SC>Здравствуйте, BioUnit, Вы писали:


SC>Если это очередь — то лучше список. Ибо обращение к элементу означает также его удаление из очереди. Если это один процесс — то лучше юзать Critical Section


Что вы этим хотели сказать?
... << RSDN@Home 1.0 beta 6a >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.