Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Остановить процесс вычисления, По нажатию кнопки 
:(
    Опции темы
Alexeis
Дата 29.3.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



ВОТ что показал делфи
http://alexei-s1.narod.ru/prog.jpg
как я и предпологал одна команда
mov [epb-$08], eax
и
mov [ebp-$0C], $000000004
Добавлено @ 13:08
Переключение процессов не приводит к потере значений регистров
так что все будет как надо smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 29.3.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alexeis1 @ 29.3.2006, 13:07 Найти цитируемый пост)
Переключение процессов не приводит к потере значений регистров
так что все будет как надо


Ну в предыдущем постинге ведь было написано, ЧТО будет потеряно. А именно - значение, присвоенное переменной во втором потоке. Если выполнение программы зависит от этого значения - вот и труднонаходимая (практически невозможно отловить) ошибка.


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 29.3.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

А именно - значение, присвоенное переменной во втором потоке

конечно если два потока будут писать в одну ячейку то результат в ней будет равен (попеременно) то значению записанному первым потоком, то вторым.
Что потеряется я все равно не понял smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 29.3.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alexeis1 @ 29.3.2006, 13:32 Найти цитируемый пост)
конечно если два потока будут писать в одну ячейку то результат в ней будет равен (попеременно)


В приведенном примере НЕ БУДЕТ равен значению из второго потока, и этим значение не удастся воспользоваться. оно просто будет потеряно. Для того, чтобы этого не происходило, и существуют такие функции как InterLocked*



--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 29.3.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

НЕ БУДЕТ равен значению из второго потока

Как же не будет?? когда команда мов его туда запишет(кто помешает записать???????)



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 29.3.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Для того же примера, который приводил -
простая операция присваивания
Код


DW1 := D;


не будет выполнена при условиях из Демо (Дата 29.3.2006, 12:44)
Добавлено @ 13:48
Здесь DW1 и D - глобальные

DW1 := D;

Первый поток: mov eax,[D]
<Переключение контекста>
Второй поток: mov eax,[D]
Второй поток: mov [DW1],eax

<Переключение контекста>
Первый поток: mov [DW1],eax



--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 29.3.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Демо, ничего себе, оба потока при этом для чтения используют другую глобальную переменную D - такого оговорено не было.
Общая ячейка только одна и каждый может писать в нее все что хочет в любое время и результат будет зависить от того кто последним записал. Ни один из двух потоков не имеет право на считывание значения из этой ячейки.

Это сообщение отредактировал(а) alexeis1 - 29.3.2006, 14:02


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 29.3.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alexeis1 @ 29.3.2006, 13:59 Найти цитируемый пост)
ничего себе, оба потока при этом для чтения используют другую глобальную переменную D - таково оговарено не было.


А что - это ситуация нестандартная?

Цитата(alexeis1 @ 29.3.2006, 13:59 Найти цитируемый пост)
Общая ячейка только одна и каждый может писать в нее все что хочет в любое время и результат будет зависить от того кто последним записал. Ни один из двух потоков не имеет право на считывание значения из этой ячейки.


Не надо налагать какие-то дополнительные ограничения. Факт один - эта операция не SafeThread.


--------------------
    
PM MAIL ICQ Skype   Вверх
Guedda
Дата 29.3.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



А Вы на флаги, люди смотрите?
Когда один поток начинает работать с глобальной переменной, то флаг поднимается, и другой тред не может получить доступа к этой же глобальной переменной. И начинает ждать... Посмотрите внимательней в окно CPU


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Alexeis
Дата 29.3.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Факт состоит в том, что
1) чтение с записью из общей памяти (не важно из какой части общей памяти) - потоконебезопасно
2) запись без чтения из общей памяти - потокобезопастно


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 29.3.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alexeis1 @ 29.3.2006, 14:09 Найти цитируемый пост)
2) запись без чтения из общей памяти - потокобезопастно


И что из этого следует? Только то, что запись без чтения никому не нужна.
Добавлено @ 14:24
Действительно - зачем писать куда-то, если не предполагается читать оттуда?
Добавлено @ 14:24
Проще тогда не писать. И защищать код тогда не придется.


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 30.3.2006, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

Действительно - зачем писать куда-то, если не предполагается читать оттуда?

не предполагается читать оттуда потоками 1 и 2.
Поток же 3 - который ни чего не пишет в общую память - спокойно оттуда читает.

На самом деле иногда применяют схемы доступа к общей памяти с неполным взаимоисключением - например: Один пишет - все ждут, никто не пишет - все читают.
Случай который мы рассматриваем так же из разряда не полного взаимоисключения. Например задача пребразования элементов массива. Несколько потоков читают данные из одного массива и пишут в другой - каждый считает только часть массива (фрагмент или в случайном порядке) - может оказаться что диапазоны входных данных и выходных перекрывются, т.о. Два потока могут писать данные в общие ячейки - в этом случае нет необходимости взаимоисключения как по входным, так и по выходным данным.

Ну что хоть чуть-чуть убедил smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 30.3.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alexeis1 @ 30.3.2006, 09:07 Найти цитируемый пост)
Ну что хоть чуть-чуть убедил


Конечно, нет.

Нет смысла говорить о согласованности данных, когда эта согласованность не нужна.
Если в результате работы потоков достаточно получить неизвестный мусор - почему бы и нет.

Но говорить о том, что не нужна синхронизация, да еще проповедовать неверную доктрину, подходящую только для весьма ограниченного круга задач - я бы сказал(как это помягче) - некорректно.


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 30.3.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

Нет смысла говорить о согласованности данных, когда эта согласованность не нужна.

В данном случае работа потоков как раз таки согласована(так сказать "строго регламенирована"), может быть даже синхронизированна, отсутствует только избыточное взаимоисключение.
Цитата

Если в результате работы потоков достаточно получить неизвестный мусор

Результат описанной задачи (с массивом) при той реализации, будет однозначным.
Я и не говорил, что это решение универсальное.

Цитата

да еще проповедовать неверную доктрину

Кстати - это не я придумал, а прочитал в умной книжке.
Что-то похожее я читал даже в статье Петровича(перевод книги про многопоточность), закрепленной в разделе Delpi Api програмирование.
Область применения неполного взаимоисключения не так уж мала.
Существуют даже удаленные БД с многопользовательским доступом,
реализаванные на принципе неполного взаимоисключения.

Кстати о полном взаимоисключении - если слишком с этим перестараться, то можно сталкнуться с весьма "непонятными" ошибками связанными с возникающими тупиками, причем определить место и причину появления иногда невероятно сложно, даже для профи.
Хотелось, бы сделать небольшое заключение.
Для работы с потоками, требуется внимание, точность и большая аккуратность, а "оржие" выбирать нужно согласно размеру "зверя",для каждой задачи свое.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Демо
Дата 30.3.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(alexeis1 @ 30.3.2006, 10:38 Найти цитируемый пост)
Что-то похожее я читал даже в статье Петровича(перевод книги про многопоточность), закрепленной в разделе Delpi Api програмирование.


Подскажи, где в переводе статьи наяти что-от подобное?
Добавлено @ 12:24
Цитата(alexeis1 @ 30.3.2006, 10:38 Найти цитируемый пост)
Кстати о полном взаимоисключении - если слишком с этим перестараться, то можно сталкнуться с весьма "непонятными" ошибками связанными с возникающими тупиками, причем определить место и причину появления иногда невероятно сложно, даже для профи.


Кстати, намного сложнее найти ошибку, если синхронизация не используется.


--------------------
    
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.