为什么互斥锁不需要互斥锁(而该互斥锁则需要互斥锁...)

塔尔博士

我正在通过几个线程的指针(cv :: Mat和bool)传递几个变量,并试图了解何时需要使用互斥锁。我发现如果不在cv :: Mat上使用它,我的程序将崩溃(可能是因为一个线程正在写入另一个正在读取的相同内存区域),所以我为这些变量实现了互斥锁,并且解决了问题。

但是现在互斥锁是我要通过指针传递给每个线程的另一个变量。因此,在这种情况下,互斥量变量的处理方法与我需要互斥量的其他变量相同,因此,互斥量有何特别之处,我也不需要互斥量(当然,继续进行下去)永远无法使用该概念)。

需要明确的是,我编写的代码可以正常工作,这更多是出于教育目的。

例子:

//Common frames 
cv::Mat captureimage, displayimage;
std::mutex capturemutex, displaymutex;

//Start image capture thread
std::thread t_imagecapture( CaptureImageThread, &captureimage, &capturemutex, &exitsignal );
//Start image processor thread
std::thread t_imageprocessor( ProcessImageThread, &captureimage, &capturemutex, &exitsignal );
//Start display thread
std::thread t_displayupdate( DisplayUpdateThread, &displayimage, &displaymutex, &exitsignal );
Stefaanv

互斥锁是原子锁。它使用低级方法(CPU),例如,它可以在不中断的情况下测试和设置锁,因此不需要外部锁即可执行此操作。一旦设置了锁定,其他线程就无法执行此操作,因此互斥锁可以保护其他资源的访问。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章