Испытайте свои критические секции Linux'ами!

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

Испытайте свои критические секции Linux'ами!

Сообщение Cheb »

Linux - это замечательное средство выпалывать баги с критическими секциями.
Вы можете думать, что ваш код без багов, и он даже может работать - а под капотом у вас может твориться страшная п0рнография, и WinAPI просто говорит: ":okay: и не такие ужасы видали"
Собираем тот же код под линуксами, запускаем - ииии, surprise buttsecks! :shock:

На моём конкретном примере: выходил из критической секции дважды. Винда: чё-чё?.. Не, не слышали. Линуксятина: ХРЯП! EInOutError :mrgreen:

Кроме того, wine под линуксом - более общее средство править радиус кривизны в работе с WinAPI в целом. Там, где винда морщится, но глотает, вайн блюётЪ от вашего говнокода (тоже на своей шкуре выучено).
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

>выходил из критической секции дважды. Винда: чё-чё?..
Слой Locks в Application Verifier предназначен как раз для этого. Ещё можно завернуть их во что-нибудь своё и запоминать/проверять ID потока, который держит блокировку. (В структуре CRITICAL_SECTION, а за ней и TRTLCriticalSection, такое поле, OwningThread, уже есть.)

Код: Выделить всё

procedure Lock.Leave;
begin
{$ifdef WINDOWS} Assert(ThreadID = cs.OwningThread); {$endif}
   LeaveCriticalSection(cs);
end;

function Lock.HeldAssert: boolean;
begin
   result := {$ifdef WINDOWS} ThreadID = cs.OwningThread {$else} true {$endif};
end;

// предусловие: захвачена LockA.
procedure Foo;
begin
   Assert(LockA.HeldAssert);
   LockB.Enter;
   ...
   LockB.Leave;
end;
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Тестировать программу на всех доступных системах и всех доступных виджесетах - хорошо. не только критические секции а вообще всё. Помогает найти множество проблем
java73
постоялец
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Сообщение java73 »

Согласен. Разница ощущается даже на вроде бы очевидных и тривиальных вещах.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

тема доказывает, что кроссплатформенное программирование это миф :mrgreen: :mrgreen: :mrgreen:
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

скалогрыз писал(а):тема доказывает, что кроссплатформенное программирование это миф :mrgreen: :mrgreen: :mrgreen:

Вообще-то я доказываю как раз обратное! :twisted:
Ответить