Хотя вроде и понимаю, надеюсь, но что-то подозрения терзают.
Есть такая тестовая функция потока:
- Код: Выделить всё
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);
Сразу оговорюсь, эта функция не используется в боевых приложениях, а только для теста.
Так вот, если запустить множество таких потоков, с точки зрения правильности работы критических секций, они должны нормально функционировать, не вызывая никаких конфликтов в блокировках между собой?
Есть ли зависимость работы замыканий от числа ядер процессора\потоков процессора? От операционной системы? От архитектуры ЦП?
Существуют ли какие-то особенности или специфика работы множества критических секций в разных, одновременно работающих потоках?
П.С. Столкнулся с тем, что выше описанный тест с потоками на некоторых устройствах под управлением Андроид - вешается при попытке создать\войти\выйти из критической секции.
Все бы было логично, если бы эта ошибка повторялась на большинстве устройств, но она всплывает в единичных случаях, на некоторых моделях устройств.