Ruby fork()

spionkaese

Software-Overclocker(in)
Hey Leute, ich hab grade ein kleines Problem und hoffe, mir kann jemand helfen:
Ich hab ein kleines Programm geschrieben, das theoretisch eine Fibonacci Zahl berechnen soll, und zwar mit mehreren Prozessen, um den Umgang damit zu lernen:
Code:
require 'win32/process.rb'
def fib(n,t) #t: multithreaded?
	if(t)
		if n == 0
			return 0
		elsif n == 1
			return 1
		else
			fork do
			fib(n-1,t).to_i+fib(n-2,t).to_i
			end
		end
	else
		if n == 0
			return 0
		elsif n == 1
			return 1
		else
			return fib(n-1,t).to_i+fib(n-2,t).to_i
		end
	end
end
a = Time.now
0.upto(32) { |i|
	puts fib(i,true).to_s+"\n"
}
puts Time.now-a
exit
Theoretisch sollte also für jeden Durchlauf der Funktion ein Prozess geforkt werden.
Zumindest mit nur einem Prozess stimmt das Ergebnis, allerdings nicht mehr mit mehreren:
Code:
0
1
7008
4204
5300
6388
0.004 #Kommentar: hier endet die eigentliche Ausgabe des Skripts!
0
1
0
false
false
false
0.0
0
1
false
false
-1
false
0.0
0
1
false
-1
false
false
0.0
0
1
false
false
false
-1
0.0
Mal von den komischen Ausgaben unten abgesehen ( :what: ), wo liegt der Fehler?
Ich bin mir ziemlich sicher (und Wikipedia auch) das die 3. Fibonacci-Zahl NICHT 7008 ist :D
Die Ergebnisse mit mehreren Prozessen verändern sich jedes mal, ich gehe also davon aus, das ich irgendwie die PID als Ergebnis nehme, aber wieso :(

Ich hoffe mir kann jemand helfen :hail:
 
Zuletzt bearbeitet:
Zurück