PDA

View Full Version : [C++/Qt] Chiamare libreria esterna da un altro thread: è "sicuro"?


sylvaticus
03-12-2009, 09:14
Ho un problema con una libreria matematica, che so non essere multithread, quando la chiamo da un altro working thread, anche se questo avviene in maniera sequenziale (chiamo-aspetto-chiamo-aspetto).
Mentre se faccio girare l'esempio che è riportato nella documentazione di questa libreria nel thread principale, quando lo faccio nel thread che vado a creare ho un crash della libraria nell'assert del tempo intercorso tramite valutazione dei cicli di CPU.
Non capisco se è un problema del mio codice (xchè? Ci possono essere delle condizioni che rendono unsafe chiamare una libreria da un thread secondario, anche se questo avviene in maniera totalmente sequenziale ed indipendente dal main thread?), un bug della libreria esterna (anche se il mainteiner mi ha detto di no) o un problema della libreria di threading delle Qt.

Un piccolo esempio compilabile lo trovate qui, ma comunque la parte interessante è questa:

int main(int argc, char *argv[]){

cout << "Test on a glpk application using Qt Threads" << endl<<endl;
Thread wThread; // subclassa QThread giusto per ridefinire il metodo run()
for (uint y=0;y<5000;y++){
wThread.start(); // esegue un semplice esempio chiamando la libreria glpk
wThread.wait();
}
cout <<"All done without errors (crashing)"<<endl;
return 0;
}

L'errore che mi ritrovo al crash è:

Assertion failed: xlcmp(env->t_last, t) <= 0
Error detected in file glplib10.c (http://grecof2.econ.univpm.it/~lobianco/public/glplib10.c) at line 109

e fa riferimento ad un calcolo del tempo trascorso utilizzando i cicli CPU.

Dove sbaglio???

cionci
03-12-2009, 19:26
Facci magari anche vedere come hai scritto la classe Thread.