ich kämpfe momentan mit einem Problem, das ich nicht mehr so richtig verstehe. Ich habe ein Programm, welches 4 Threads startet und die Thread kommunizieren untereinander über eine separate Klasse als geteilter Speicher.
Wenn ich jetzt nun einen ADVector ( vector < B < F <interval> > > ) aus dem Speicher abrufen will, so produziert mir das Programme ab und zu einen Speicherzugriffsfehler. Wenn ich die Zeile mit dem Zugriff auskommentiere, so bleibt der Fehler aus, genauso, wenn ich statisch einen ADVector weiter übergebe.
Sobald ich die Thread ein wenig mit this->msleep(...) ausbremse, so läuft das Programm stabil, genauso wenn ich Debug Symbole hinzufüge (im .pro CONFIG += debug), läuft das Programm auf Grund des verlangsamten Ablaufs stabil.
Da es sich um ein Optimierungsprogramm handelt, sollte es so schnell wie möglich die Daten bearbeiten und nicht ausgebremst werden. Hier der Code-Schnipsel dazu :
Code: Alles auswählen
//////////////////////////////////////////////////
// Mutex - Datenaustausch
/////////////////////////////////////////////////
if (dataMutex.tryLock())
{
if(!liste->empty()) { // Liste ist eine stl_map
// Pruefen, ob neue Datensaetze benoetigt werden
if(liste->size() > 1) {
if(dataStorage->needData())
{
dataStorage->sendADVector(liste->begin()->second, threadID);
liste->erase(liste->begin());
}
}
dataMutex.unlock();
}
// Liste ist leer, Daten anfordern
else {
if(!registeredEmptyList) {
dataStorage->ranOutOfData(threadID);
registeredEmptyList = true;
}
// neue Datensaetze beschaffen und diesen abspeichern
if(dataStorage->hasNewADVectorForThread(threadID)) {
setInitialADVector(dataStorage->getADVector(threadID));
initializeListe();
}
if(dataStorage->allThreadsIdle())
finished = true;
dataMutex.unlock();
this->msleep(12);
}
}
Für jede Hilfe wäre ich echt dankbar. Übrigens hab ich auch schon den boost vector verstucht!
samy75