c++ - 为什么互斥锁不需要互斥锁(而那个互斥锁需要互斥锁...)

标签 c++ multithreading opencv mutex

我通过指针(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 );

最佳答案

互斥量是一种原子锁。它使用低级方法(CPU),例如,它可以 test-and-set锁不会被中断,因此不需要外部锁来执行此操作。并且一旦设置了锁,其他线程就无法执行此操作,因此互斥量可以保护其他资源的访问。

关于c++ - 为什么互斥锁不需要互斥锁(而那个互斥锁需要互斥锁...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39291647/

相关文章:

Java wait/notify 不在线程中调用

python - 使用 OpenCV 直方图均衡化时遇到问题

C++ 聊天客户端缺少 lib 文件

c - pthread_join 损坏堆栈中的 pthread_create 参数

c++ - 一个类使用另一个类的方法c++

android - 在这种情况下如何避免 IllegalStateException : The content of the adapter has changed but ListView did not receive a notification

visual-studio-2010 - 在Visual Studio 2010中的cvQueryFrame执行

c++ - 在 OpenCv 中对 cv::Mat 进行排序

c++ - 验证代码以检查数字是否为回文

c++ - 未定义对 `__gxx_personality_sj0` 的引用