Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hello,
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.
maxon::KdTree
maxon::ParallelFor
FindNearest()
FindRange()
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.
maxon::Spinlock
Thanks for any tips & help, Frank
What you describe sounds like a job for maxon::RWSpinlock.
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.
const
kdtree.cpp
threadIndex
Always using the threadIndex, of course Thanks, I'll try that!