Хотя вроде и понимаю, надеюсь, но что-то подозрения терзают.
Есть такая тестовая функция потока:
- Код: Выделить всё
- function TestThread(__Data : Pointer): Integer;
 var
 c : integer;
 cs : TRTLCriticalSection;
 begin
 c := 0;
 InitCriticalSection(cs);
 while true do
 begin
 EnterCriticalSection(cs);
 Inc(c);
 LeaveCriticalSection(cs);
 if c > 100 then Break;
 Sleep(100);
 end;
 DoneCriticalSection(cs);
 Result := 0;
 end;
Запускаем ее так: BeginThread(@TestThread);
Сразу оговорюсь, эта функция не используется в боевых приложениях, а только для теста.
Так вот, если запустить множество таких потоков, с точки зрения правильности работы критических секций, они должны нормально функционировать, не вызывая никаких конфликтов в блокировках между собой?
Есть ли зависимость работы замыканий от числа ядер процессора\потоков процессора? От операционной системы? От архитектуры ЦП?
Существуют ли какие-то особенности или специфика работы множества критических секций в разных, одновременно работающих потоках?
П.С. Столкнулся с тем, что выше описанный тест с потоками на некоторых устройствах под управлением Андроид - вешается при попытке создать\войти\выйти из критической секции.
Все бы было логично, если бы эта ошибка повторялась на большинстве устройств, но она всплывает в единичных случаях, на некоторых моделях устройств.


