Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Вниз

Потокобезопасность DecodeDate()   Найти похожие ветки 

 
antonn ©   (2011-03-03 15:10) [0]

Является ли DecodeDate() (из SysUtils) потокобезопасной? Там в DecodeDateFully() есть примерно следующий код:
var
     DayTable: PDayTable;
begin
DayTable := @MonthDays[Result];
while True do  begin
         I := DayTable^[M];


где MonthDays объявлена глобально:
type
 PDayTable = ^TDayTable;
 TDayTable = array[1..12] of Word;

const
 MonthDays: array [Boolean] of TDayTable =
   ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
    (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));


Не будет корявок при доступе к этой константе из разных потоков?


 
clickmaker ©   (2011-03-03 15:17) [1]

> Не будет корявок при доступе к этой константе из разных
> потоков?

это же константа. С чего бы корявки возникнут при доступе только на чтение?


 
antonn ©   (2011-03-03 15:38) [2]

Не могу найти тему, недавно спрашивал, похожая ситуация была с константным массивом, Анатолий вроде говорил что могут быть затыки. Потому и переспрашиваю


 
Анатолий Вроде   (2011-03-03 15:45) [3]

>> Анатолий вроде говорил что могут быть затыки

Доступ к константам потокобезопасен. Затыков не будет.


 
antonn ©   (2011-03-03 16:12) [4]

а вот и старая темка http://delphimaster.net/view/15-1282149795


 
antonn ©   (2011-03-03 16:13) [5]

начиная с поста [33]


 
clickmaker ©   (2011-03-03 16:15) [6]

там про изменяемые константы, насколько я понял.
Надеюсь то время, когда число дней в месяце будет переменным, не наступит


 
antonn ©   (2011-03-03 16:20) [7]


> там про изменяемые константы, насколько я понял.

там в начале юнита объявление и никакого изменения по коду, только использование. Почти то же что и у меня тут, потому и спрашиваю еще раз.


 
clickmaker ©   (2011-03-03 16:23) [8]

в любом деле надо не только на логику опираться, но и на здравый смысл.
Ты же в театр в каске не ходишь? Хотя там тоже с потолка что-нибудь упасть может


 
antonn ©   (2011-03-03 16:30) [9]

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


 
clickmaker ©   (2011-03-03 16:39) [10]

> Хорошо бы Анатолий откоментировался, почему там "по сути
> это переменная",

он уже там откомментировался. Потому что типизированная константа - на самом деле не константа


 
clickmaker ©   (2011-03-03 16:40) [11]

впрочем, это настраивается в проекте и директивой {$J+}


 
antonn ©   (2011-03-03 16:40) [12]

а MonthDays здесь не такая же?


 
Anatoly Podgoretsky ©   (2011-03-03 16:41) [13]


> antonn ©   (03.03.11 15:10)  

А где тут DecodeDate?


 
Anatoly Podgoretsky ©   (2011-03-03 16:44) [14]


> clickmaker ©   (03.03.11 16:15) [6]

Оно уже примерно 400 лет переменное, пока один месяц, но все же


 
Anatoly Podgoretsky ©   (2011-03-03 16:45) [15]


> antonn ©   (03.03.11 16:30) [9]
> Хорошо бы Анатолий откоментировался, почему там "по сути
> это переменная", а в этой теме можно не защищать.

Я уже высказывал свое фи по поводу констант, которые в отличии от здравого смысла не совсем уж и не изменяемые.


 
antonn ©   (2011-03-03 16:51) [16]


> А где тут DecodeDate?

Смотреть сверху вниз начиная с YearOf(), так нагляднее:
type
PDayTable = ^TDayTable;
TDayTable = array[1..12] of Word;

const
MonthDays: array [Boolean] of TDayTable =
  ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
   (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

function YearOf(const AValue: TDateTime):Word;
var LMonth,LDay:word;
begin
      DecodeDate(AValue,Result,LMonth,LDay);
end;

procedure DecodeDate(const DateTime: TDateTime; var Year, Month, Day: Word);
var Dummy:Word;
begin
     DecodeDateFully(DateTime, Year, Month, Day, Dummy);
end;

function DecodeDateFully(const DateTime: TDateTime; var Year, Month, Day, DOW: Word): Boolean;
...
var
...
  DayTable: PDayTable;
begin
  ...  
   Result := IsLeapYear(Y);
   DayTable := @MonthDays[Result];
   M := 1;
   while True do
       begin
         I := DayTable^[M];


 
Противный   (2011-03-03 18:10) [17]

>> Я уже высказывал свое фи по поводу констант

Анатолий, а скажите, до каких пор нам терпеть begin и end в Pascal? Это же просто безобразие какое-то!


 
Anatoly Podgoretsky ©   (2011-03-03 20:27) [18]

> Противный  (03.03.2011 18:10:17)  [17]

А я убью за отсутствие begin и end, я тут согласен с Виртом


 
Противный   (2011-03-03 21:10) [19]

>> Anatoly Podgoretsky ©   (03.03.11 20:27) [18] <...>убью<...>

Это угроза? То есть, если молчать, то начало и конец так и останутся. А если ратовать за отмену, то придет Анатолий и убьет. И в том, и в другом случаях, получается - на всю жизнь. Разве что, в первом случае, можно надеяться, что хотя бы жизнь будет длинной. Но конец наступит обязательно.

Или смерть, или безнадега, а потом все равно смерть.

To be or not to be?
There is no question.

This is the end,
My only friend, the end<...>
Father, yes son, I want to kill you.

http://www.youtube.com/watch?v=QHFK1yKfiGo



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1299150042
fantoma
2011-03-03 14:00
2011.06.12
Печать в fastreport


15-1298012535
Гость
2011-02-18 10:02
2011.06.12
посоветуйте Бесплатный хостинг


15-1298554260
JohnKorsh
2011-02-24 16:31
2011.06.12
Константы в Си.


2-1299242761
advise
2011-03-04 15:46
2011.06.12
По готовой программе можно узнать какие компоненты в ней


15-1298041715
Leonid Troyanovsky
2011-02-18 18:08
2011.06.12
Гугль рулит





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский