there is always something we managed to not get in touch with... for me, it's threading and locks...
In one of my classes, I have a maxon::KdTree. It is being rebuilt from time to time, depending on some factors. Then there are potentially multiple threads (from maxon::ParallelFor) that want to access the KdTree to call its FindNearest() and FindRange() functions. These have to wait for the tree to be built, of course.
If I understand the concept of locks correctly, I would need to lock the KdTree while it is being rebuilt. But for the FindNearest() and FindRange() calls, I would need to wait for the KdTree being unlocked, but I would not need to lock it, as those functions are thread safe (if used right), is that correct? So, I looked at the Locks & Synchronization Manual, and I'm not sure which lock to use. It seems, maxon::Spinlock is not what I'm looking for.
Thanks for any tips & help,
What you describe sounds like a job for maxon::RWSpinlock.
But, FindNearest() and FindRange() are not const, these functions may actually mutate the internal data (you can look at the source in kdtree.cpp). So be sure to use the threadIndex arguments.
Always using the threadIndex, of course
Thanks, I'll try that!