Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
ВнизTThread. Направьте на путь истинный... Найти похожие ветки
← →
xtreme (2003-04-01 10:42) [0]Привет всем...
Ситуация простая. В основном модуле реализованы 2 функции:
1.. функция, которая читает данные из файла и засовывает их в
поток с (TMemoryStream);
2.. функция, которая берет эти данные из потока
(TMemoryStream), форматирует и пишет на диск;
Чего хочется: организовать два потока (TThread). Первый вызывает 1-ю функцию, 2-й поток вторую.
Вопрос: на сколько потокобезопасным будет вызов функций основного модуля из этих двух потоков? Может что посоветуете?
С Уважением,
Игорь.
← →
Romkin (2003-04-01 11:18) [1]Хреново - тебе все равно надо их синхронизировать при обращении к TMemoryStream, так что не вижу особой разницы по сравнению с одним потоком
← →
Digitman (2003-04-01 11:26) [2]
> Romkin
ну, наверно, трэды-то кроме обращения к потоку еще и иной немалой функц-ю обладают) ... пре/пост обработка ввода/вывода, скажем ... так что идея с 2-мя трэдами, скорей всего, имеет право на существование
разумеется, синхронизация доступа к одному и тому же потоку должна быть реализована
← →
Polevi (2003-04-01 12:26) [3]CricitalSection для блокировки
PostThreadMessage, Event, Mutex, Semaphore для сообщения потоку 2 что есть данные
← →
malkolinge (2003-04-01 12:58) [4]Только запомни правило.Два независимых(читай одиноковых) потока синхронизируються мьютексами, птоки с отношением главный/подчиненны - критическими секциями, если возможен конфликт по ресурсам используй семафор.. Про все это читай в Тексейре и Пачеко
← →
Polevi (2003-04-01 13:01) [5]это такое правило прописано
← →
Zemal (2003-04-01 13:04) [6]Просишь направить на путь истинный? Ну получай! :) Затаривайся литературой и читай-читай-читай :). Вопрос у тебя возникает только потому что ничего про потоки незнаешь... так что единственный путь для решения твоей проблемы это досканально разобраться с потоками, а не лезть в форумы и ждать готового кода :). На самом деле у тебя элементарный пример работы с семафорами и т.д. И никакой проблемы нет :).
← →
Zelius (2003-04-01 14:10) [7]Мое мнение: две последовательные задачи - следовательно нет смысла делать два потока, все прекрасно и в одном переживет! Синхронизировать вызовы в главный поток надо обязательно, другое дело как это делать! Скорее всего одним из способов: TThread.Synchronize, CriticalSection, Post/SendMessage. Выбор методов очень зависим от решаемой задачи.
← →
xtreme (2003-04-01 15:11) [8]Всем спасибо. Понятно куда двигаться..
To: Zemal
Это верно. С потоками я раньше не работал. Но дело в том, что я вчера был в 3-х наиболее крупных московских магазинах, но ничего по потокам там не нашел. Готового кода я не ждал. Я ждал указаний на верный путь :) их я получил с лихвой :)
С Уважением,
Игорь.
← →
VaS (2003-04-01 16:14) [9]>Только запомни правило.Два независимых(читай одиноковых) потока >синхронизируються мьютексами, птоки с отношением >главный/подчиненны - критическими секциями, если возможен >конфликт по ресурсам используй семафор.. Про все это читай в >Тексейре и Пачеко
Мама дарагая :(
Кр. секции и Interlocked-функции - для синхронизации потоков в рамках одного процесса. Мьютексы, события, семафоры, жд.таймеры - для межпроцессной синхронизации.
← →
Digitman (2003-04-01 16:50) [10]
> VaS © (01.04.03 16:14)
ну это уж слишком категорично)
> Кр. секции и Interlocked-функции - для синхронизации потоков
> в рамках одного процесса
безусловно - так !
> Мьютексы, события, семафоры, жд.таймеры - для межпроцессной
> синхронизации.
в том числе (и в 1-ю очередь) - да ... но порой без них никак не обойтись и для внутрипоточной синхронизации
← →
VaS (2003-04-01 17:06) [11]Digitman: Абсолютно согласен. Просто у народа каша в голове :))
← →
Digitman (2003-04-01 17:28) [12]
> VaS
эт точно))
(с) Верещагин П.А.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c