Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CriticalSection [D7, XP]


Страницы:   1 2 3

Неважно ©   (2010-01-20 11:56:00) 

Один из потоков увеличивает(Inc) переменную. Второй уменьшает (Dec). А в третьем мне необходимо отдавать значение этой переменной.
С первым и вторым потоком все понятно :

EnterCriticalSection(CS);
Dec(FCountConnect); // или Inc
LeaveCriticalSection(CS);


Собственно, сам вопрос. А в третьем потоке я могу "отдать" значение этой переменной , например, так :

PostMessage(FMainHandle,WM_USER+99,wParam(FCountConnect),0);

Или нужно опять защищать ? Т.е. так :

EnterCriticalSection(CS);
PostMessage(FMainHandle,WM_USER+99,wParam(FCountConnect),0);
LeaveCriticalSection(CS);


Спасибо!


Sha   (2010-01-20 13:07:00) [41]

Для изменения проще использовать Interlocked-функции.
Выровненные чтение и запись атомарны, поэтому на чтение защищать не надо.


Неважно   (2010-01-20 12:57:00) [42]

Спасибо. Что-то тут "шум" возник. Одни говорят не нужно, вторые нужно.
Весело ))

В общем, на чтение защищать не буду.


> Защищать нужно ОБЯЗАТЕЛЬНО в блоках: try..finally.


А какое возможно исключение в коде Inc(FCountConnect) ?


Игорь Шевченко   (2010-01-20 12:39:00) [43]

Ega23 ©   (20.01.10 12:27) [10]

Ты развивай свою мысль дальше, случилось исключение, дальше что ?


Игорь Шевченко   (2010-01-20 12:34:00) [44]

Б   (20.01.10 12:26) [9]

Какое именно место в справке надо читать ?


Б   (2010-01-20 12:30:00) [45]


> правильно - когда возможно исключение.


Я написал в целом.


Ega23   (2010-01-20 12:27:00) [46]


> Какого фига, это не правильно?


правильно - когда возможно исключение.


Б   (2010-01-20 12:26:00) [47]


> Игорь Шевченко ©   (20.01.10 12:23) [8]


Читай справку.


Игорь Шевченко   (2010-01-20 12:23:00) [48]

Б   (20.01.10 12:20) [7]

Религиозный фанатизм и бездумное написание кода в программировании не уместны.


Б   (2010-01-20 12:20:00) [49]


> У тебя времени дофига и пальцы стальные ? Ну так не учи
> других неправильному


Какого фига, это не правильно?


@!!ex   (2010-01-20 12:19:00) [50]

> [2] Ega23 ©   (20.01.10 12:14)

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


Игорь Шевченко   (2010-01-20 12:18:00) [51]

Б   (20.01.10 12:17) [4]

У тебя времени дофига и пальцы стальные ? Ну так не учи других неправильному


Б   (2010-01-20 12:17:00) [52]

Защищать нужно ОБЯЗАТЕЛЬНО в блоках: try..finally.



 EnterCriticalSection(CS);
 Try
    Dec(FCountConnect); // или Inc
 Finally
    LeaveCriticalSection(CS);
 end;


Игорь Шевченко   (2010-01-20 12:17:00) [53]


>
> EnterCriticalSection(CS);
> PostMessage(FMainHandle,WM_USER+99,wParam(FCountConnect),
> 0);
> LeaveCriticalSection(CS);


Так не нужно


Ega23   (2010-01-20 12:14:00) [54]


> Нужно защищать.


На чтение - не нужно.


@!!ex   (2010-01-20 12:10:00) [55]

Нужно защищать.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо