我理解互斥锁和解锁在c ++中是如何工作的,但我对以下内容感到有些困惑。
在我的程序中我正在通过运行for循环实时进行视频流传输。来自视频流的下一帧被传递到函数中以执行3个簇的KMeans。 kmean例程在主线程的单独线程上运行。 Kmeans需要20-30秒才能执行聚类。
为了避免更改kMeans算法中的变量,我使用Mutex锁定和解锁资源以避免冲突,如下面的函数所示。
//做Kmeans功能
void *do_Kmeans(void * arg){
pthread_mutex_lock(&Mutex); //Mutex defined as global variable
myMeans *eMax = new myMeans(); //! Kmeans class
eMax->setImage(*source); //! Source image from the real time video str
eMax->doImageClustering(); //Perform Kmeans
pthread_mutex_unlock(&Mutex);
//return all the elements
}
现在上面的功能运行良好,根本没有问题。但我的问题只是关于互斥体的混淆。
30fps的视频流将在主要30秒内运行for循环,但是在20-30秒的每一天中仅比Kmeans完成。因此,帧传递给函数的剩余时间是什么时候发生的。我认为它被丢弃,因为Mutex锁当时正在锁定资源。我想知道这是真的吗?我能否对Mutex有一些清晰的解释,因为注释似乎有点难以理解。
此外,如果我想处理所有连续帧而不是创建堆栈并将帧保持在堆栈中,但我担心堆栈将呈指数级增长并且我的内存将在一瞬间被淹没。