[Cbc] Threadsafe usage of Cbc

John Forrest john.forrest at fastercoin.com
Wed Dec 18 08:22:31 EST 2013


Cornelius,

I have made some changes, which I hope will be enough for you.  I have 
done the minimum amount of work.

I don't think they can hurt anyone but as Ted Ralphs is preparing a new 
release, I will delay updating Cbc/stable/CbcSolver.?pp for a day or 
two.  If anyone wants to test the code I attach CbcSolver.?pp.

You need to compile with -DCBC_THREAD_SAFE.  The main thing this does is 
that Cbc only reads argv/argc type parameters in a crude threadsafe 
way.  You also need to use alternative versions of CbcMain0/1.

parallel.cpp has been added to Cbc/examples which is a simple example.

Please tell me if there are any problems.  Some lesser used Cgl cut 
generators may not be threadsafe, but I think the commonly used ones are.

John Forrest


On 17/12/13 15:11, Cornelius Riemenschneider wrote:
>
> Hello,
>
> we use CBC via googles or-tools from java in our application.
>
> Compared to scientific problems, our problems are small and solved by 
> Cbc in <1s (which is great!).
>
> As we process requests from users concurrently, we'd also like to call 
> Cbc concurrently.
>
> Currently, this is impossible, because Cbc uses the static parameters 
> array in CbcMain0 and CbcMain1 and thus crashes or reads incorrect 
> parameters.
>
> One backtrace, for example is:
>
> #2 0x00007fb3435bf52b in __libc_message (do_abort=<optimized out>, 
> fmt=<optimized out>) at ../sysdeps/unix/sysv/linux/libc_fatal.c:189
> #3 0x00007fb3435c8d76 in malloc_printerr (action=3, str=0x7fb3436a1248 
> "double free or corruption (!prev)", ptr=<optimized out>) at malloc.c:6283
> #4 0x00007fb3435cdaac in *__GI___libc_free (mem=<optimized out>) at 
> malloc.c:3738
> #5 0x00007fb342733f06 in std::string::assign(std::string const&) () 
> from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
> #6 0x00007fb2d652cb7b in establishParams(int&, CbcOrClpParam*) () from 
> libjnilinearsolver.so
> #7 0x00007fb2d64edc3b in CbcMain0(CbcModel&) () from libjnilinearsolver.so
> #8 0x00007fb2d6511bec in callCbc(char const*, CbcModel&) () from 
> libjnilinearsolver.so
> #9 0x00007fb2d64e3fce in 
> operations_research::CBCInterface::Solve(operations_research::MPSolverParameters 
> const&) () from libjnilinearsolver.so
> #10 0x00007fb2d64cfe45 in 
> operations_research::MPSolver::Solve(operations_research::MPSolverParameters 
> const&) () from libjnilinearsolver.so
> #11 0x00007fb2d64cff3b in operations_research::MPSolver::Solve() () 
> from libjnilinearsolver.so
> #12 0x00007fb2d64c91cf in 
> Java_com_google_ortools_linearsolver_mainJNI_MPSolver_1solve_1_1SWIG_10 () 
> from libjnilinearsolver.so
>
> # from here on it's just the JVM
>
> As I don't know the code and it's hard to read, I can't really fix the 
> problem by myself,
>
> but wouldn't it be better to move parameters inside CbcModel instead 
> of having a static array laying around?
>
> Andi f that's done (or another solution is found), do you know of any 
> thread-safety issues in cbc?
>
> Keep in mind, we don't want Cbc to solve our problem in multiple 
> threads, we just want to be able to solve different problems simultaneous.
>
> Regards,
>
> Cornelius Riemenschneider
>
> --
>
> ITscope GmbH
>
> Ludwig-Erhard-Allee 20
>
> 76131 Karlsruhe
>
> Email: cornelius.riemenschneider at itscope.de 
> <mailto:cornelius.riemenschneider at itscope.de>
>
> https://www.itscope.com
>
> Handelsregister: AG Mannheim, HRB 232782
>
> Sitz der Gesellschaft: Karlsruhe
>
> Geschäftsführer: Alexander Münkel, Benjamin Mund, Stefan Reger
>
>
>
> _______________________________________________
> Cbc mailing list
> Cbc at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/cbc

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20131218/eff3858b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cbcsolver.tar.gz
Type: application/x-gzip
Size: 84656 bytes
Desc: not available
URL: <http://list.coin-or.org/pipermail/cbc/attachments/20131218/eff3858b/attachment-0001.gz>


More information about the Cbc mailing list