[boost_thread] Beispielprogramm geht nicht



  • Ich habe folgendes Beispielprogramm gefunden:

    #include <boost/thread/thread.hpp>
    #include <boost/thread/mutex.hpp>
    #include <iostream>
    boost::mutex io_mutex;
    
    struct count
    {
        count(int id) : id(id)
        { }
        void operator()()
        {
            for (int i = 0; i < 100; ++i)
            {
                {
                    boost::mutex::scoped_lock lock (io_mutex);
                    std::cout << id << ": " << i << std::endl;
                }
            }
        }
        int id;
    };
    int main(int argc, char* argv[])
    {
        boost::thread thrd1(count(1));
        boost::thread thrd2(count(2));
        thrd1.join();
        thrd2.join();
        return 0;
    }
    

    Eigentlich hätte ich erwartet, dass die Beiden Threads unabhängig voneinander hochzählen und die Ausgabe etwas "Gemischt" ist. funktioniert leider nicht ganz, zuerst kommen sämmtliche des 1. dannn alle des 2.

    Könnte daran liegen, dass der erste Thread schon fertig ist bevor ein reschedule auftritt?



  • Mach doch mal mehr als 100. So 100.000 oder sowas.


  • Mod

    darthdespotism schrieb:

    Eigentlich hätte ich erwartet, dass die Beiden Threads unabhängig voneinander hochzählen und die Ausgabe etwas "Gemischt" ist. funktioniert leider nicht ganz, zuerst kommen sämmtliche des 1. dannn alle des 2.

    Könnte daran liegen, dass der erste Thread schon fertig ist bevor ein reschedule auftritt?

    Das dürfte daran liegen, das der einzige Zeitraum, in dem ein Threadwechsel stattfinden kann, der Zeitraum zwischen Freigabe und Wiederanforderung des Mutex ist, genau in diesem Moment müsste der Scheduler einspringen, das ist nicht sehr wahrscheinlich, besonders bei so wenig Zyklen. Ein sleep vor der Anforderung des Mutex zeigt möglicherweise interessanteres Verhalten.


Anmelden zum Antworten