Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
Может ли портиться память или произойти блокировки при чтении кол-ва элементов в очереди без синхронизации?
Например
Поток 1 читает
cnt:= TQueue.Count;

Поток 2
FLock.Enter;
if TQueue.Count > 0 then
TQueue.Dequeue;
FLock.Leave;

Поток 3
FLock.Enter;
TQueue.Enqueue;
FLock.Leave;

Достоверность при чтении без крит. секции не важна.
22 май 20, 19:53    [22137891]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31168
cptngrb
Может ли портиться память или произойти блокировки при чтении кол-ва элементов в очереди без синхронизации?
нет
22 май 20, 20:03    [22137900]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50050

Это зависит от реализации геттера у Count, поскольку внезапно это не Integer, а property.

Posted via ActualForum NNTP Server 1.5

22 май 20, 20:04    [22137901]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9845
Ни то ни другое ... Я про 10.3.3
22 май 20, 20:11    [22137908]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
Dmitry Arefiev, а что?
22 май 20, 20:31    [22137921]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
В документации
Count gets the number of elements in the queue. This property cannot be set.
22 май 20, 20:32    [22137922]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
property Count: Integer read FQueueHelper.FLH.FCount;

а внутри FQueueHelper.FLH.FCount;

FCount: Integer;
22 май 20, 20:34    [22137924]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
Dimitry Sibiryakov, а такое property можно в потоке читать бесстрашно? ))
22 май 20, 20:35    [22137925]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9845
cptngrb
Dimitry Sibiryakov, а такое property можно в потоке читать бесстрашно? ))

Да, если только TQueue не разрушается.

А так, ты можешь получить значение Count не согласованное с внутренним массивом. Дальше при Dequeue ты можешь получить исключение, если рассчитывешь, что Count > 0 показывает наличие элементов в очереди.

Ну или как еще ... Я хз как ты используешь Count.
22 май 20, 21:57    [22137956]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
Dmitry Arefiev, при Dequeue / Enqueue используется крит. секция, отдельно Count я вызываю только для статистики
23 май 20, 12:00    [22138089]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11780
cptngrb
а такое property можно в потоке читать бесстрашно? ))
Да. Пока в следующей версии не поменяют реализацию
25 май 20, 15:13    [22139095]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
а ТОЛЬКО чтение StringList может испортить память ?

str:= StringList[i];


Сообщение было отредактировано: 25 май 20, 19:29
25 май 20, 19:31    [22139272]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50050

Испортить память - нет. Нарваться на AV - да.

Posted via ActualForum NNTP Server 1.5

25 май 20, 22:00    [22139333]     Ответить | Цитировать Сообщить модератору
 Re: Чтение/Запись Integer в несколько потоков  [new]
cptngrb
Member

Откуда:
Сообщений: 558
Dimitry Sibiryakov, к сожалению AV в логе не увидел, а потоки подвесил
26 май 20, 08:23    [22139462]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить