Re: cst.lib/cst.dll

> With the single-threaded version of the C-api, are you able to create and release K objects on different threads?

No. The single threaded version (cst.lib/cst.dll) may have only a single thread active using the c-api.

> If not, are you allowed to create/free K objects on two or more distinct threads at all with cst.lib

No.

 

For the c.lib/c.dll multithreaded library, is it safe to serialize an object created on another thread (assuming I can guarantee it won’t be de-allocated by the source thread)? 

Yes.  You can create a k-object on one thread, and pass the reference to another thread, so long as the 2nd thread does not retain the reference past the release of the object from the 1st thread - it was generated by thread 1, and therefore must be finally released to the heap in thread 1. This can be tricky (due to nested objects), hence it is best, as you say, to serialize the object to pass objects between threads.