Страница 1 из 1

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

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

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

Кроме того, wine под линуксом - более общее средство править радиус кривизны в работе с WinAPI в целом. Там, где винда морщится, но глотает, вайн блюётЪ от вашего говнокода (тоже на своей шкуре выучено).

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

СообщениеДобавлено: 12.04.2017 13:02:51
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;

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

СообщениеДобавлено: 12.04.2017 17:24:07
zub
Тестировать программу на всех доступных системах и всех доступных виджесетах - хорошо. не только критические секции а вообще всё. Помогает найти множество проблем

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

СообщениеДобавлено: 12.04.2017 22:08:13
java73
Согласен. Разница ощущается даже на вроде бы очевидных и тривиальных вещах.

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

СообщениеДобавлено: 12.04.2017 22:30:45
скалогрыз
тема доказывает, что кроссплатформенное программирование это миф :mrgreen: :mrgreen: :mrgreen:

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

СообщениеДобавлено: 13.04.2017 00:45:12
tema
скалогрыз писал(а):тема доказывает, что кроссплатформенное программирование это миф :mrgreen: :mrgreen: :mrgreen:

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