[GiNaC-list] symtab problem with multithread

Kraus Philipp philipp.kraus at flashpixx.de
Fri Aug 20 20:07:37 CEST 2010


Hi,

I try to use a GiNaC::symtab in a thread object. I copy a const  
reference to the threaded method and get problems on reading the  
symbols.
If I take a symbol from the table with GiNaC::ex x =  
m_symbols["mysymbol"], I would run on > 1 thread into errors. Valgrind  
shows this information:

Possible data race during write of size 4 at 0x1ea5c04 by thread #1

==38631==    at 0x8137: std::_Rb_tree<std::string,  
std::pair<std::string const, GiNaC::ex>,  
std::_Select1st<std::pair<std::string const, GiNaC::ex> >,  
std::less<std::string>, std::allocator<std::pair<std::string const,  
GiNaC::ex> > >::_M_erase(std::_Rb_tree_node<std::pair<std::string  
const, GiNaC::ex> >*) (in main)

==38631==    by 0x92BF:  
boost::_bi::storage1<boost::_bi::value<worker<double, 2ul> >  
 >::~storage1() (in main)

==38631==    by 0xE0B0: boost::thread*  
boost::thread_group::create_thread<boost::_bi::bind_t<void,  
boost::_mfi::mf0<void, worker<double, 2ul> >,  
boost::_bi::list1<boost::_bi::value<worker<double, 2ul> > > >  
 >(boost::_bi::bind_t<void, boost::_mfi::mf0<void, worker<double, 2ul>  
 >, boost::_bi::list1<boost::_bi::value<mworker<double, 2ul> > > >)  
(in main)

I have copied the table with
std::copy( p_syms.begin(),       p_syms.end(),        
std::inserter(m_symbols, m_symbols.begin()));

p_syms is the original table and m_symbols should be the copy, but it  
doesn't work. In my thread object I can use a deep copy of the symbol  
table, because every thread is independed of the other threads.

I'm not sure that the problem is a GiNaC problem, but you can give  
some tips perhaps.

Thanks

Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cebix.net/pipermail/ginac-list/attachments/20100820/f1078ab9/attachment.html>


More information about the GiNaC-list mailing list