Hi Eliot,
I'm no expert in C programming, but I suppose a global counter could be used to ensure that no other threads have modified the array before swapping the pointers.
Btw, I thought that object pinning would make it possible to get rid of the external semaphore table altogether. We need different plugin code for that, but I think it would be simpler and more efficient.
Why is #at:put: not thread-safe? Isn't it a primitive, so that no suspension point occurs provided both arguments are valid?
Happy New Year!
Levente