Написал программку на Аде (там это в две строчки делается), тем более gnat один фиг gcc использует и вроде как основа создания нитей там такая же как в си. Вот только на всех доступных машинах примерно одно и тоже число нитей получается запустить (1520 плюс минус с десяток). Запускал на тонком клиенте (где оперативы почти что нет) - те же 1500 с чем то. Осталось проверить на Си шной программке.
ЗЫ. В /proc/sys/kernel/threads-max просьба носом не тыкать, там все в порядке. ulimit -a на все показывает unlimited, пробовал через нее размер стека уменьшать - не помогает.
Код: Выделить всё
with ada.text_io;
use ada.text_io;
procedure Thr is
task type pot is
entry start(n:integer);
end pot;
task body pot is
begin
accept start(n:integer) do
put_line(n'img);
end start;
while true loop
delay 1.0;
end loop;
end pot;
type s is access pot;
len:integer:=20000; -- Количество нитей
type mass is array(1..len) of s;
a:mass;
begin
for i in mass'range loop -- меняем i от 1 до len
a(i) := new pot; -- запускаем нить
a(i).start(i); -- вызываем рандеву с текущей нитью и передаем ей ее номер
end loop;
end Thr;