umtxn status unter freebsd



  • Hi,

    ich schreibe für unseren Server einen kleinen c++ daemon, der als JobQueue fungiert, und sich die abzuarbeitenden Jobs aus einer mysql datenbank holt.

    Die Jobs sollen parallel abgearbeitet werden, weshalb ich sie mittels der boost::thread library in eigenen threads starte.

    Funktioniert soweit auch einwandfrei, leider bleibt der daemon auf freebsd
    in unregelmässigen abständen in einem "umtxn" status hängen und reagiert nicht
    mehr.

    Ich versuche das Problem jetzt schon seit fast 1 Woche zu lösen, weiss aber langsam nicht mehr weiter. Allen möglichen zeitgleichen Zugriffen auf gemeinsame Ressourcen beuge ich mit einem boost::thread::scoped_mutex lock vor, wie zb
    dem Schreiben in std out:

    void QueueManager::output(std::string x) {
    
    	boost::mutex::scoped_lock lock(boost::mutex);
    
    	if (!settings.daemon)
    		std::cout << x.c_str() << std::endl;
    
    }
    

    Gestartet werden die threads dann wie folgt:

    Job job();
    
    boost::thread thread(boost::bind(&Job::run, job));
    

    Hat jemand von euch eine Ahnung was unter freebsd zu einem umtxn status führen kann? Was ich soweit rausgefunden hab ist dass es anscheinend was mit mutex locking zu tun hat.

    Wär für jeden Tip dankbar, was zu diesem Verhalten führen könnte.


Anmelden zum Antworten