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

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

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

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

Сообщение Cheb » 12.04.2017 03:10:48

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

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

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

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

Сообщение runewalsh » 12.04.2017 13:02:51

>выходил из критической секции дважды. Винда: чё-чё?..
Слой 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;
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение zub » 12.04.2017 17:24:07

Тестировать программу на всех доступных системах и всех доступных виджесетах - хорошо. не только критические секции а вообще всё. Помогает найти множество проблем
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение java73 » 12.04.2017 22:08:13

Согласен. Разница ощущается даже на вроде бы очевидных и тривиальных вещах.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

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

Сообщение скалогрыз » 12.04.2017 22:30:45

тема доказывает, что кроссплатформенное программирование это миф :mrgreen: :mrgreen: :mrgreen:
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение tema » 13.04.2017 00:45:12

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

Вообще-то я доказываю как раз обратное! :twisted:
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 18

Рейтинг@Mail.ru
cron