我对线程的概念完全不熟悉。
我必须使用一个线程从我的主程序中更新一些cv :: mat变量。
我只知道线程意味着共享变量的问题:/
所以我认为我不能在我的主要和线程中使用一般变量
我正在使用
#include <thread>
这是我的主题fct:
void MyThreadFunction()
{
cv::Mat a;
cv::Mat b;
while (1)
{
capture_L.read(a);
capture_R.read(b);
}
}
我在进入主循环之前调用它(用于渲染)。所以我的目标是在我的主要功能中访问a和b。我怎么能这样做?
答案 0 :(得分:1)
实际上,如果您从多个主题访问a
和b
变量,则会出现互斥问题。这可以通过使用mutex
来解决。在读取和/或写入变量之前,您需要lock
互斥锁,然后unlock
。这可以通过lock_guard
完成。
你可以这样做:
#include <mutex>
#include <thread>
void MyThreadFunction(mutex& m, cv::Mat& a, cv::Mat& b)
{
while (1)
{
[ ... ]
{
lock_gard<mutex> l(m);
capture_L.read(a);
capture_R.read(b);
}
}
}
int main()
{
mutex m;
cv::Mat a, b;
thread t(MyTjreadFunction, ref(m), ref(a), ref(b));
{
lock_gard<mutex> l(m);
[ ... access a & b ... ]
}
t.join();
return 0;
}