![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
_hunter, прав если предварительно значение не считывать, то будет все в порядке.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
если ресур общий ( а память -- общая ) всеравно.
вот если на двух компах... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Не все равно. Смысл всех этих потуг с синхронизацией заключается в том, чтобы данные были в согласованном состоянии. Простая ситуация: 2 потока, обрабатыва.щие однц и ту же строку: Последовательная обработка, когда потоки работают последовательно: Первый поток записывает в строку: CommonStr := '1234567890'; Первый поток читает строку и обрабатывает ее; //Строка '1234567890' Второй поток записывает в строку: CommonStr := 'abcefghij'; Второй поток читает строку и обрабатывает ее; //Строка 'abcefghij' Параллельная обработка: Первый поток записывает в строку: CommonStr := '1234567890'; //Первый поток успевает записать только '123' Второй поток записывает в строку: CommonStr := 'abcefghij'; //Второй поток успевает записать всю строку Первый поток продолжает записывать оставшуюся часть строки '4567890' Первый поток читает строку и обрабатывает ее; //Строка 'abc4567890' Второй поток читает строку и обрабатывает ее; //Строка 'abc4567890' Это всего лишь схематично. На самом деле все намного сложнее. -------------------- |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
вопрос звучал не читать, а только писать читать может только третий -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
читать нужно было так:
если ресур общий всеравно будет затык. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
И в результате прочитает полную чушь. В общем, процесс синхронизации необходим всегда, за исключеним работы с типом Byte и Boolean. -------------------- |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
а так же word, DWord, extended. mov [....], eax mov [....], ax mov [....], al одна команда
иногда может оказаться что и так сойдет(правда редко) шучу, конечно а вообще если record писать то и в правду нельзя Это сообщение отредактировал(а) alexeis1 - 27.3.2006, 16:20 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
А так? -
С Integer и Extended еще хуже. Это сообщение отредактировал(а) Демо - 27.3.2006, 16:33 -------------------- |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Демо, integer, Cardinal, LongWord, DWord - для процессора - это один и тот же тип. Для записи значения из регистра в память используется одна машинная команда ( которую никто не может прервать).
ее аналог в ассемблере mov DW1, eax (ebx, ecx...) таким образом запись в память производится за один такт. c Extended - работает сопроцессор Extended - это также атомарный тип также будет обрабатываться за такт. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
alexeis1,
Посмотри, какой код получается сначала. Все типы, кроме однобайтовых, необходимо защищать. -------------------- |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
чем хуже Добавлено @ 11:51 Демо, покажи ассемблерный код которыу получится -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
alexeis1,
2 команды. Или я что-то не понял? -------------------- |
||||
|
|||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Хм... А если просто:
-------------------- Ll 2 |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Guedda,
Ну мы же не на ассемблере пишем;) PS. Ошибки при обновлении переменных возникнут при переключении контекстов потоков планировщиком в то время, когда поток обновляет переменную, а она может быть доступна другим потокам, или когда выполняются одновременно два потока на различных процессорах На большинстве компьютеров увеличение значения переменной не является атомарной операцией, а требует следующих шагов: - Загрузить значение из переменной экземпляра в регистр. - Увеличить или уменьшить значение. - Сохранить значение в переменной экземпляра. Если не использовать методы синхронизации, поток может быть прерван после выполнения первых двух шагов. Затем другой поток может выполнить все три шага. Когда первый поток продолжит выполнение, он переписывает значение в переменную экземпляра, и эффект увеличения или уменьшения значения, выполненного вторым потоком, теряется. -------------------- |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |