Hello,
I am presently working on a port of code-libraries which make extensive use of CLN to multi-threaded code (e.g. using OpenMP or explicit "by hand" threading), for use on multi-core and SMP systems.
This is a very good idea. OpenMP allows to make use of multiple processors with very little programming effort. And gcc-4.2 will support it.
CLN release 1.1.13 is not re-entrant, and as far as I can tell from preliminary evaluation (and a large number of tests which produce major heap corruption), this is primarily because of the non-atomic reference counting (and possibly other mechanisms that I have not yet located).
You could probably easily replace this with atomic increments and decrements; it's centralized in the three methods cl_inc_pointer_refcount cl_gc_dec_pointer_refcount cl_rc_dec_pointer_refcount in include/cln/object.h. It will need a few CPU specific asms in order to be efficient. Furthermore you have to minimize/eliminate the global variables in cl_low.h. Also some cl_hash* tables might need locking. There are also a few global variables, such as the default precision and the input/output radix. Probably they are only modified at the start of any cln application. All in all, it's quite feasible, because most of CLN is written in a functional style and uses parameter passing on the stack. Bruno