Frage zu boost::threads



  • versuche mich grad an Thread-Programmierung und verwende die Boost-Bibliothek. Ziel ist, eine OpenCV-Programm, welches zur Zeit "seriell" abläuft, zu paralellisieren. Nun habe ich noch ein paar einfache Fragen, die bestimmt von Euch beantwortet werden können:

    • Thema Synchronisation: muss ich "Locken", wenn zwei Threads ausschließlich lesend auf eine Variable zugreifen?
    • habe einen Intel DualCore: ist es sinvoll, mehr als 2 threads zu starten bzw gleichzeitig laufen zu lassen, wenn ich sowieso "nur" zwei Kerne habe?
    • ist es schneller, eine for-Schleife innerhalb eines Threads durchlaufen zu lassen, oder eine for-Schleife zu programmieren, in dem der Thread immer wieder neu gestartet wird( da wäre die Synchronisation mit anderen Threads für meinen Fall einfacher)?


  • elsucht schrieb:

    [*]Thema Synchronisation: muss ich "Locken", wenn zwei Threads ausschließlich lesend auf eine Variable zugreifen?

    Nein, zum Glück nicht.

    elsucht schrieb:

    [*] habe einen Intel DualCore: ist es sinvoll, mehr als 2 threads zu starten bzw gleichzeitig laufen zu lassen, wenn ich sowieso "nur" zwei Kerne habe?

    Ja, kann durchaus sinnvoll sein! Solange die Thread-Anzahl halt im Rahmen bleibt; eine vier- oder fünfstellige Anzahl an Threads könnte ein OS schon wegen dem Overhead in's Schwitzen bringen (kommt natürlich auf Anwendung, OS und System an).

    elsucht schrieb:

    [*]ist es schneller, eine for-Schleife innerhalb eines Threads durchlaufen zu lassen, oder eine for-Schleife zu programmieren, in dem der Thread immer wieder neu gestartet wird( da wäre die Synchronisation mit anderen Threads für meinen Fall einfacher)?

    Threads zu starten bringt natürlich Overhead.



  • Badestrand schrieb:

    elsucht schrieb:

    [*]Thema Synchronisation: muss ich "Locken", wenn zwei Threads ausschließlich lesend auf eine Variable zugreifen?

    Nein, zum Glück nicht.

    Es sei denn es gibt einen 3. Thread der die Daten auch mal ändert. In dem Fall müssen auch die beiden lesenden Threads ihre Zugriffe mit dem "Schreiber" synchronisieren.

    elsucht schrieb:

    [*]ist es schneller, eine for-Schleife innerhalb eines Threads durchlaufen zu lassen, oder eine for-Schleife zu programmieren, in dem der Thread immer wieder neu gestartet wird( da wäre die Synchronisation mit anderen Threads für meinen Fall einfacher)?

    Threads zu starten bringt natürlich Overhead.

    Jo. Es ist auf jeden Fall wesentlich (dramatisch, gigantisch! *wild-fuchtel-und-gestikulier*) viel schneller mal eben eine Critical-Section/Mutex zu locken, als gleich nen Thread zu starten.


Anmelden zum Antworten