Многопоточность с немногопоточными типами? Это просто !
От: Олег Зубарьков  
Дата: 22.10.01 19:09
Оценка: 407 (6)
Статья:
Многопоточность с немногопоточными типами? Это просто !
Автор(ы): Олег Зубарьков
Дата: 13.10.2001
STL и многие другие библиотеки написаны с учётом эффективности и удобства, но без учёта многопоточности процессов ( и это правильно ), но как же использовать эту кучу кода в многопоточных приложениях без написания эквивалентной кучи кода?


Авторы:
Олег Зубарьков

Аннотация:
STL и многие другие библиотеки написаны с учётом эффективности и удобства, но без учёта многопоточности процессов ( и это правильно ), но как же использовать эту кучу кода в многопоточных приложениях без написания эквивалентной кучи кода Чтобы решить эту проблему, я написал простой класс (заголовочный файл "mthread.h")
GuardedT<"класс, доступ к объекту которого должен быть синхронизирован", 
         "класс блокировки">


позволяющий использовать немногопоточные типы в многопоточной среде:
Ой.
От: Иван Коростелёв ivank.hut.ru
Дата: 18.11.01 04:11
Оценка:
Я забыл второй параметр в GuardT поставить, но сути это не меняет...
Конструктивная( надеюсь ) критика.
От: Иван Коростелёв ivank.hut.ru
Дата: 18.11.01 04:08
Оценка: 1 (1)
Вырезано из письма автору:

с STL всё же возможны траблы -- например если в одном потоке делаетсе итерирование по всем элементам std::list, а в другом какой-нить элемент удаляется...

то есть такой пример потенциально может вызвать проблеммы:

typedef std::list< std::string > sl;

GuardT< sl > some_list;

void thread1()
{
for( sl::iterator it = some_list->begin();
it != some_list->end();
++it )
{
// ...
}
}

void thread2()
{
while( ( sl::iterator it = some_list->begin() ) != some_list->end() )
some_list->erase( it );
}

А всё почему? Потому что итераторы возвращаются незащищённые. То есть существует вероятность что:

1) thread1 сделает sl::iterator it = some_list->begin();
2) произойдёт threadswitching
3) thread2 сделает первую итерацию цикла -- удалит первый элемент
4) когда очередь дойдёт до thread1 it будет указывать в никуда...
Классный класс ! =)
От: Igor Soukhov  
Дата: 17.11.01 08:47
Оценка:
Чувсвуется рука мастера =)
Когда увидим продолжение ?
* thriving in a production environment *
мысли-1 ( да-да, очередной сериал :)
От: Аноним  
Дата: 23.10.01 19:09
Оценка:
Что касается блокировки различных потоков ( данных ), то здесь можно ( и нужно :)
оптимизировать вывод, возвращая не заблокированный cout, а, например, ostringstream или
что-то на него похожее, деструктор которого записывает сформатированную строку в cout
( читай — блокировка только на вывод одной сформатированной строки )
поскольку форматирование различных данных занимает время, а блокировать другие потоки
( вычислительные ) на всё время форматирования — не хорошо. Таким образом, мы и
мультипоточной среде можем ничего не терять... кроме волос на голове, но и здесь мы в плюсе,
поскольку говорят, что волосы уже научились пересаживать с какой-то задней части :)

всё тот же писатель ( ударение ставьте сами :)
Re: Многопоточность с немногопоточными типами? Это просто !
От: BOPOH_N Россия  
Дата: 18.11.04 17:55
Оценка:
На эту же тему можно посмотреть в реализации ACE:
Atomic_Op_T.h]Atomic_Op_T.cpp
Atomic_Op_T.inl
и т.д.
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[2]: Многопоточность с немногопоточными типами? Это просто
От: BOPOH_N Россия  
Дата: 18.11.04 18:08
Оценка:
Более четабельно:

здесьздесь
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re: Многопоточность с немногопоточными типами? Это просто !
От: Andrew S Россия http://alchemy-lab.com
Дата: 29.04.08 11:43
Оценка:
Сорри что поднимаю "зомби", но возник следующий вопрос.
Дело в том, что приведенное решение, в общем случае, не является корректным С++ кодом (и компиляция на comeau это подтверждает), поскольку недоступен конструктор копирования для объекта, передаваемого по значению.
Понятно, хотелось бы аналогичного, но работоспособного на современных компиляторах решения. Может кто видел?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.