Threading



  • In Standard-C++ gibt es kein Threading so viel ich weiß.
    Was sind Alternativen ? Posix?





  • interessant ... sollte boost nicht mal zum c++ standard gehören? oder irre ich da?



  • teile von boost (unter anderem thread) werden im neuen standard übernommen, ja...



  • sihsa schrieb:

    interessant ... sollte boost nicht mal zum c++ standard gehören? oder irre ich da?

    Boost kann man als "Standard-Sandbox" ansehen denke ich.

    Da wird ausprobiert und rumgemacht, und die wichtigsten Dinge, bzw. die die am breitesten akzeptiert und eingesetzt werden, werden dann u.U. irgendwannmal Standard.
    Oft mit kleinen Änderungen, aber meist wirklich nur mit kleinen.



  • Zum Selberbauen (es gibt auch pThreads fuer Windows):
    http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html



  • shisha schrieb:

    In Standard-C++ gibt es kein Threading so viel ich weiß.
    Was sind Alternativen ? Posix?

    Im nächsten Standard wird es aber definitiv Threading geben, wenn auch nur die Basics dafür. Eine umfangreiche Thread-Lib wird dann mit dem TR2 kommen.

    Solange empfiehlt sich Boost.Thread. Posix würde ich nur benutzen, wenn man Plattform-abhängig sein kann.



  • Im nächsten Standard wird es aber definitiv Threading geben, wenn auch nur die Basics dafür. Eine umfangreiche Thread-Lib wird dann mit dem TR2 kommen.

    Zaehlt nicht, da man jetzt damit programmieren moechte. Boost.Thread hat einem aber schon die Arbeit abgenommen, pThreads (unter POSIX-konformen Systemen) in Klassen zu wrappen. Fuer das bischen Threading mag ich meist keine weiteren Abhaengigkeiten. Bei mir persoenlich gibs dann noch ne Mutex- und MutexLock-Klasse, das war es dann auch.

    Boost kann man als "Standard-Sandbox" ansehen denke ich.

    Nein, dafuer gibt es zu viel, was nie nicht niemals als Standard in Erwaegung gezogen wird. Auch wurde z.B. das Threading komplett ueberarbeitet, damit es zum neuen Standard kompatibel ist.



  • Es ist natürlich besser sich seine eigene Thread-Klasse zu bauen, anstatt auf Boost.Thread zurück zu greifen... 🙄


  • Administrator

    aufmerksamer_leser schrieb:

    ..., wenn auch nur die Basics dafür. Eine umfangreiche Thread-Lib wird dann mit dem TR2 kommen.

    Inwiefern eigentlich nur die Basics? Und was soll denn noch alles im TR2 kommen?

    Wesentliche Unterschied, welche ich zwischen dem Draft und Boost.Thread finden kann:

    • thread_group nur in Boost.Thread
    • shared_lock, upgrade_lock, upgrade_to_unique_lock, scoped_try_lock nur in Boost.Thread
    • shared_mutex nur in Boost.Thread
    • Barriers nur in Boost.Thread

    Dafür gibt es in C++0x Futures, das hat Boost gar nicht, soweit ich das erkennen kann.

    Grüssli



  • Artchi schrieb:

    Es ist natürlich besser sich seine eigene Thread-Klasse zu bauen, anstatt auf Boost.Thread zurück zu greifen... 🙄

    Ich habe gesagt, es reicht aus, nicht das es besser ist. Ich hoffe du hast die Schluesselwoerter wie ... mag ich ... persoenlich ... gesehen. Und Boost.Thread und "nur eine Thread-Klasse" sind Welten. Boost fuer alles und jeden ... zu verwenden, finde ich uebertrieben.



  • @knivil:
    Wieso sollte man sich selbst was schreiben? Damit man erst wieder Fehler reinbaut? Fehler die u.U. sau-schwer zu finden/debuggen sind? Nö.
    Und wieso sollte man nicht gleich die Library verwenden die auch in grösseren Projekten Sinn macht, wo "alles" drin ist was man braucht?

    Anders gesagt: wieso sollte man es nicht gleich richtig machen?

    Nur damit man erstmal was lernt was man später garantiert nichtmehr brauchen wird? Oder im schlimmsten Fall dann dabei hängen bleibt, und ewig mit halbwarmen Sachen rumwurstelt, bloss weil die Boost ja "overkill" ist?

    Hmmm...



  • Wieso sollte man sich selbst was schreiben? Damit man erst wieder Fehler reinbaut?

    Damit man hinter die Kulissen schaut.

    Damit man erst wieder Fehler reinbaut?

    Meine Threadklasse ist etwa 100 Zeilen lang. Ausserdem gehoeren Fehler zum Lernprozess. Da man den Code nachnutzen kann, braucht man die Klasse auch nur einmal schreiben.

    Und wieso sollte man nicht gleich die Library verwenden die auch in grösseren Projekten Sinn macht, wo "alles" drin ist was man braucht?

    Ich moechte meine Anwendungen moeglichst auch auf anderen Rechnern uebersetzen. Dort ist Boost meist nicht verfuegbar, pThreads schon (zumindestens unter Linux).

    Anders gesagt: wieso sollte man es nicht gleich richtig machen?

    Ich mache es aus meiner Perspektive nicht falsch.

    Nur damit man erstmal was lernt was man später garantiert nichtmehr brauchen wird?

    Ich habe Assembler gelernt. Ich brauche es nicht, wenn ich C oder C++ schreibe, aber es hilft mir gewisse Fehler nicht (mehr) zu machen.

    Boost ja "overkill" ist?

    Subjektiv ...



  • knivil schrieb:

    Damit man erst wieder Fehler reinbaut?

    Meine Threadklasse ist etwa 100 Zeilen lang. Ausserdem gehoeren Fehler zum Lernprozess.

    Das war bestimmt auch ne Ausrede von dem Typen, der an dem Overflow schuld war, als die Ariane 5 Rakete explodierte! 😃

    ESA-Chef: "Herr Mayer! Haben Sie den Ariane-Code verbrochen?"
    Mayer: "Ja!"
    ESA-Chef: "Wieso ist die Areane explodiert?"
    Mayer: "Es gab einen Overflow in der Flugbahnberechnung, der eine Exception auslöste."
    ESA-Chef: "WAS?! Wissen Sie eigentlich was der Fehler uns gekostet hat!?"
    Mayer: "Ach Chef, Fehler gehören zum Lernprozess nunmal dazu!"

    Neee, ist klar! 🙄

    Deine Argumente zählen im Hobbybereich oder in der Fortbildung (die natürlich immer nebenbei stattfindet)... aber Boost & Co. setze ich nach Möglichkeit immer ein, wenn ich ernsthaft an einem Projekt arbeite!



  • Selber schreiben ist gut, da lernt man viel. Aber wenn man dann den Code einsetzen will, dann lieber boost.thread oder pthreads oder sonstwas nehmen.

    aber selber schreiben ist generell eine gute idee - nur den code dann zu verwenden ist eine schlechte.



  • Shade Of Mine schrieb:

    aber selber schreiben ist generell eine gute idee - nur den code dann zu verwenden ist eine schlechte.

    Du zündest Deinen Grill wohl auch mit 500€ Scheinen an, was? 😃



  • Tachyon schrieb:

    Shade Of Mine schrieb:

    aber selber schreiben ist generell eine gute idee - nur den code dann zu verwenden ist eine schlechte.

    Du zündest Deinen Grill wohl auch mit 500€ Scheinen an, was? 😃

    verstehe ich nicht.

    grundlagen wissen scheint ja ziemlich unbeliebt zu sein...


  • Administrator

    knivil schrieb:

    Ich moechte meine Anwendungen moeglichst auch auf anderen Rechnern uebersetzen. Dort ist Boost meist nicht verfuegbar, pThreads schon (zumindestens unter Linux).

    Also dieses Argument begreife ich nicht. Boost ist ja auf noch so exotischen Platformen verfügbar und Boost.Thread kapselt auf gewissen Platformen auch gleich pthreads.

    Des Weiteren ist Boost sehr flexibel aufgebaut, ich kann mir kaum vorstellen, dass du mit 100 Zeilen Code die gleiche Flexibilität hinbekommen hast 😉

    Ich stimme Shade Of Mine zu, als Lernprozess, bzw. zur Fortbildung, ist sowas eine sehr gute Sache. Aber im produktiven Einsatz sollte man nicht Lösungen von Übungen aus Lernstunden einsetzen.

    Grüssli



  • Shade Of Mine schrieb:

    grundlagen wissen scheint ja ziemlich unbeliebt zu sein...

    ja. also wenn jemand ordentlich programmieren lernen will, kann ich ihm nicht mehr empfehlen, regelmäßig dieses forum zu lesen. das ist schade.



  • knivil schrieb:

    Damit man erst wieder Fehler reinbaut?

    Meine Threadklasse ist etwa 100 Zeilen lang. Ausserdem gehoeren Fehler zum Lernprozess. Da man den Code nachnutzen kann, braucht man die Klasse auch nur einmal schreiben.

    Fehler gehören nur zum Lernprozess, wenn man sie auch findet, da man ja sonst schliesslich nix davon lernt.
    Wenn du dich gut mit Threading und den ganzen versteckten Fallstricken auskennst, solltest du wissen, dass man viele Fehler die man da machen kann, kaum jemals findet. Die Art von Fehlern, die auch kaum bis garnicht zu reproduzieren sind, wenn man genau weiss was der Fehler ist, und speziell Code schreibt, der darauf aus ist, den Fehler zu triggern.

    Irgendwann crasht vielleicht mal ein Programm aus "unerfindlichen" Gründen, oder liefert 1 von 10000 mal das falsche Ergebnis.

    Dass es an falschen Annahmen liegt, unter denen man seine Threading-Klassen gebaut hat, vermutet dann selten jemand. Vor allem weil es "vorher ja immer funktioniert hat", "muss also an was anderem liegen". Bzw. oft denkt man dann garnichtmehr an Code den man vor Monaten oder sogar Jahren mal geschrieben hat.

    Grundsätzlich gebe ich dir Recht: ja, es kann oft sinn machen etwas selbst zu schreiben, weil man dadurch dazulernt. Zumindest wenn man nicht unter Zeitdruck ist, und/oder es privat macht (die Firma hat auch meist keine Freude wenn man anfängt irgendwas selbst zu implementieren, was es auch fertig gegeben hätte, noch dazu wenn die fertige Variante gut und gratis ist). Sobald es das Thema Thrading betrifft sehe ich die sache aber wie gesagt ganz anders.

    Ich moechte meine Anwendungen moeglichst auch auf anderen Rechnern uebersetzen. Dort ist Boost meist nicht verfuegbar, pThreads schon (zumindestens unter Linux).

    Boost ist bei den meisten Linux Distros mit dabei, und funktioniert auf vielen Plattformen (auch mit "nicht Mainstream CPUs").
    Falls Boost.Thread wirklich nicht verfügbar sein sollte ist das natürlich ein gutes Argument. Für deine Anwendunge.
    Allerdings kein gutes Argument sich allgemein gegen Boost.Thread auszusprechen.

    Und: PTHREADS vorauszusetzen halte ich für wesentlich schlimmer, als Boost.Thread vorauszusetzen. Schon alleine weil PTHREADS das K.O. für Windows bedeutet.

    Boost ja "overkill" ist?

    Subjektiv ...

    Pfuh. Was genau an Boost.Thread ist für dich Overkill?


Anmelden zum Antworten