首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么互斥锁不需要互斥锁(而那个互斥锁需要互斥锁...)

为什么互斥锁不需要互斥锁(而那个互斥锁需要互斥锁...)
EN

Stack Overflow用户
提问于 2016-09-02 19:45:48
回答 1查看 305关注 0票数 4

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

但是现在互斥锁是我通过指针传递给每个线程的又一个变量。因此,在这种情况下,对mutex变量的处理与我需要互斥的其他变量的使用是相同的,所以互斥的特殊之处在于我不需要互斥(当然,这种情况永远发生,概念不起作用)。

需要说明的是,我的代码运行得很好,这更多的是出于教育目的。

示例:

代码语言:javascript
复制
//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 );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-02 19:50:09

互斥锁是一个原子锁。它使用低级方法(CPU),例如,它可以在不被中断的情况下test-and-set锁,因此它不需要外部锁来执行此操作。一旦设置了锁,其他线程就不能这样做了,所以互斥锁可以保护其他资源的访问。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39291647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档