Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Quando è safe e quando no chiamare una libreria esterna da un thread secondario

0 views
Skip to first unread message

sylvaticus

unread,
Dec 3, 2009, 4:29:28 AM12/3/09
to
Ho un problema nel chiamare una libreria matematica (glpk) da un
thread secondario rispetto a quello principale.
In pratica, anche se organizzo l'accesso alla libreria in maniera
sequenziale ed utilizzando un unico thread, ho dei crash semirandom
mentre se la libreria la facci ogirare dal thread principale non ho
problemi.

Non capisco se il problema risieda nel mio codice, in un bug di glpk
(ma il maintainer mi ha risposto di no) o in un bug della libreria di
threading delle Qt.

Un micro-esempio compilabile di esempio può essere scaricato da:
http://grecof2.econ.univpm.it/~lobianco/public/qtglpk.tgz

ma il punto principale è comunque questo:
[CODE]
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;
}
[/CODE]
Chiamando wThread.start() il working thread esegue un semplice esempio
riportato nella documentazione di glpk (per la verità loopando un po'
di volte) e dopo un po' mi crasha con il seguente messaggio:
[QUOTE]
Assertion failed: xlcmp(env->t_last, t) <= 0
Error detected in file glplib10.c at line 109
[/QUOTE]
( http://grecof2.econ.univpm.it/~lobianco/public/glplib10.c )
mentre se faccio girare quest'esempio nel thread principale non ho
errori.

Dove sbaglio??

fnegroni

unread,
Dec 3, 2009, 6:28:13 AM12/3/09
to

Per caso e' la libreria glpk della GNU?
C'e' una mailing list apposta:
http://www.mail-archive.com/help...@gnu.org/info.html
E pure una dove spedire i bug reports: bug-...@gnu.org

Penso che quelle siano meglio di questa nel rispodere ad un problema
non necessariamente specifico al C++.

0 new messages