?
akay schrieb:
ich setze mich gerade mit multicore programmierung auseinander [...] goroutines [...] wollt nur wissen, ob es ähnliche möglichkeiten auch für C++ gibt. also irgend eine lib oder sowas
In der nächsten C++ Version sollte sich das alles mehr oder weniger elegant emulieren lassen, denke ich. Aber Go hat, was das angeht, sicherlich den süßeren Syntaxzucker.
func DoSomething(done chan <- int) {
// do some processing...
done <- 1;
}
func main() {
done := make(chan int, 1);
go DoSomething(done);
// do something else
<-done; // wait
// do more things
}
könnte man vielleicht auch so in C++0x machen:
void DoSomething(chan<int> done) {
// do some processing...
done << 1;
}
int main() {
auto done = make_chan<int>(1);
auto futu = async(DoSomething,done);
done.read(); // wait
futu.get(); // retrieve the function's result from the future
}
wobei ich das Klassentemplate chan<> und das Funktionstemplate make_chan<> frei erfunden habe. Es müsste aber möglich sein, sie so zu definieren, dass hier genau das passiert, was man erwarten würde. Natürlich ist hier der "done-Channel" wegen dem future-Objekt überflüssig. Was allerdings passiert, wenn das future-Objekt zerstört wird, bevor die Ausführung von DoSomething fertig ist, weiß ich nicht. Müsste man mal nachgucken. Eventuell ist das nicht erlaubt. Man kann aber auch relativ einfach einen Ersatz für std::async schreiben, der das verkraften würde.
... nur mal so um auf den Geschmack von C++0x zu kommen ...