Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 07:05   #1
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
Восклицание Пару вопросов про синхронизацию\критическую секцию

1)
Код:
function TNewThread.Load(img:TIdMultiPartFormDataStream):bool;
begin 
img.AddFile( 'photo', 'C:\\1.jpg', 'image/jpg' );
end;
К данной функции могут обратиться несколько потоков сразу. Так что есть шанс что файл C:\\1.jpg будет считываться одновременно в несколько потоков.

Нужна ли тут синхронизация или крит. секция ?

2)
Код:
function TNewThread.GRT():string;
begin
Result:=list[RandomRange(0,list.Count)];
end;
list типа TStringList, объявлен глобально.
К данной функции могут обратиться несколько потоков сразу. Нужна ли тут крит. секция ?

3)
Код:
procedure TNewThread.Execute;
begin
if Form1.CheckBox1.Checked = true then ........
end;
Создается несколько потоков.Мы ни чего не меняем, только сверяем, но все же.Нужна ли тут синхронизация?

Спасибо за ответы
bakanaev вне форума Ответить с цитированием
Старый 14.03.2013, 08:22   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

1. на чтение не нужна... только правильно флаги открытия файла выстави
если будет запись то нужна синхронизация через крит сек
2. если значение list.Count не меняется то можно и так, если меняется размер и содержимое то критической секцией
3. обязателен Sync
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 14.03.2013 в 08:25.
Slym вне форума Ответить с цитированием
Старый 14.03.2013, 08:40   #3
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

После ответа Slym'a сомневаюсь, что я правильно понимаю, как всё это работает. Но всё же напишу, что думаю:
1 - Обязательно синхронизация или крит.секция.
2 - Не уверен. Возможно лучше будет, если будет синхронизация или крит.секция.
3 - Синхронизация или крит.секция не нужны.
Kix.IV вне форума Ответить с цитированием
Старый 14.03.2013, 09:49   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от Kix.IV Посмотреть сообщение
После ответа Slym'a сомневаюсь, что я правильно понимаю, как всё это работает. Но всё же напишу, что думаю:
1 - Обязательно синхронизация или крит.секция.
2 - Не уверен. Возможно лучше будет, если будет синхронизация или крит.секция.
3 - Синхронизация или крит.секция не нужны.
твой совет полностью противоположен
в общем случае криты нужны там где что-то меняется..
а синхрониз только для общение с формами из потока
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 14.03.2013 в 09:57.
Slym вне форума Ответить с цитированием
Старый 14.03.2013, 10:05   #5
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Так, и кому верить ?:D
Цитата:
только правильно флаги открытия файла выстави
Как в данном случаи они выставляются)?
Код:
img.AddFile( 'photo', 'C:\\1.jpg', 'image/jpg' );
bakanaev вне форума Ответить с цитированием
Старый 14.03.2013, 10:17   #6
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Цитата:
в общем случае криты нужны там где что-то меняется..
а синхрониз только для общение с формами из потока
Частично согласен. Предлагаю разобраться.
1 - Я не знаю, как устроена эта функция, но явно что-то изменяет. Если не ставить синхронизацию, то последствия не предсказуемы.
2 - Тут я с тобой согласен.
3 - Зачем здесь синхронизация? Это ведь логиеская переменная, а не свойство или функция. Конфликта здесь не должно быть.

Цитата:
Так, и кому верить ?:D
Себе. Попробуй разные варианты и посмотри, что будет.

Последний раз редактировалось Kix.IV; 14.03.2013 в 10:20.
Kix.IV вне форума Ответить с цитированием
Старый 14.03.2013, 11:24   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

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

Исключение атомарные(неделимые с точки зрения процессора|памяти) данные (байт,...). На этом собственно и основаны все системы синхронизации (атомарная операция фиксации захвата и ...вперед при удаче до освобождения)

1)чтение общих данных(файла) в локальный(надеюсь) объект. (п2) общий доступ к файлу давно существует.
2)чтение общих данных (п2 если все читают)(п3 если другие там копаются и правят)
3)а здесь мы прежде всего используем очень большой объект (Form1)(и еще объект поменьше checkbox1) c которыми неизвестно кто и неизвестно что делает), а не маленькую логическую переменную (Form1.checkBox1.Checked).
гарантии только чтения нет =>синхронизировать добычу данной переменной в локальное пространство потока.
Цитата:
3 - Зачем здесь синхронизация? Это ведь логиеская переменная, а не свойство или функция. Конфликта здесь не должно быть.
именно что свойство и даже функция. Чтение свойства у заданного объекта. (а другие потоки могут его и менять).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.03.2013 в 11:32.
evg_m вне форума Ответить с цитированием
Старый 14.03.2013, 11:39   #8
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Код:
TCheckBox = class(TCustomCheckBox)
  strict private
    class constructor Create;
    class destructor Destroy;
  published
    property Checked;
Действительно свойство.
Kix.IV вне форума Ответить с цитированием
Старый 14.03.2013, 12:19   #9
bakanaev
Форумчанин
 
Регистрация: 27.03.2012
Сообщений: 438
По умолчанию

Ребята спасибо, особенно evg_m. Можно закрывать тему)
bakanaev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пару вопросов... qewertyns Помощь студентам 6 10.12.2012 00:43
Программа вхождения и выхождения в критическую секцию.. hen Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 06.11.2011 22:38
Вопрос про синхронизацию и статику Lemon2009 Общие вопросы по Java, Java SE, Kotlin 1 22.03.2010 22:01
Пару вопросов Syltan Свободное общение 2 19.10.2009 01:45