Quick A: use a std::unique_lock
with std::try_to_lock
parameter in the constructor.
Recently on SO:
Conditionally acquire an std::mutex
It is actually unsafe to have a unique_lock accessible from multiple threads at the same time. I'm not familiar with the opencv portion of your question, so this answer is focused on the mutex/lock usage.
static std::mutex s_FAST_GPU_mutex; { // Create a unique lock, attempting to acquire std::unique_lock<std::mutex> guard(s_FAST_GPU_mutex, std::try_to_lock); if (guard.owns_lock()) { cv::gpu::FAST_GPU(/*params*/)(/*parameters*/); guard.unlock(); // Or just let it go out of scope later } else { cv::FAST(/*parameters*/); } }This attempts to acquire the lock, if it succeeds, uses FAST_GPU, and then releases the lock. If the lock was already acquired, then goes down the second branch, invoking FAST
Add a Comment
Comments are closed.