Naszóval.
Az N darab konstans kiíratását nem fogod tudni megcsinálni, mert ahhoz előre tudnod kellene a műveletek végeredményét, és függvény lévén, ezt nem fogja neked megcsinálni a compiler, meg a futás közben sem létezik olyan optimalizáció, ami gyorsabban végrehajtja neked ezt a műveletet, mintha inkrementálnád i-t, pakolgatnád a stackbe a paramétereket, és hívogatnád a cos fv-t.Nyilván itt lehetne külön formázni a floatot és előkészíteni az stdoutot, de pl. egy printf esetén ennek nem sok értelme van, mert threadot kreálni jóval több idő, mint floatot formázni.
Másik dolog: NE keverjük össze az utasításszintű párhuzamosságot a szálakkal! Csővezeték már a 386-osban is volt, az utasításátlapolás teljesen más tészta, mint a többszálú működés. A többszálú működés lényege, hogy olyan utasításokat hajtasz végre párhuzamosan (akár virtuális, akár valós párhuzamosítással), amelyeknek semmi közük egymáshoz (alacsony szinten legalábbis), de itt a legkisebb értelmezett egység az utasítás, a legnagyobb pedig a taszk vagy a processz, az utasításszintű párhuzamosítás legnagyobb egysége az utasítás, a legkisebb pedig az utasítás feldolgozásának lépései.
Satöbbi, satöbbi, satöbbi, ha nem oké, akkor szólj hozzá. :)
while (!sleep) sheep++;