我通过指针(cv :: Mat和bool's)将几个变量传递给多个线程,并试图了解何时需要使用互斥锁。我发现如果不在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 );
答案 0 :(得分:4)
互斥锁是原子锁。它使用低级方法(CPU),例如,它可以test-and-set锁定而不会被中断,因此它不需要外部锁来执行此操作。一旦设置了锁,没有其他线程可以做到这一点,因此互斥锁可以保护其他资源的访问。