[英]Threads sharing resources C++
我目前在程序中运行两个线程:
主线程-捕获来自网络摄像头的图像,并将其存储在CVD图像中。 对这个图像进行处理。
服务器线程-使用命名管道将存储在上述CVD图像中的完整图像数据发送给其客户端。
当我运行程序时,它会工作很短一段时间,然后崩溃,但出现以下异常:
0xC000005: Access violation reading location 0x0000000
我认为这是因为我的服务器线程正在尝试与主线程同时访问映像。
我以前没有做任何并发编程(这是我第一次),但是目前我对如何解决它有一个模糊的想法。
我的计划是拥有某种锁,以防止在服务器准备将其发送给客户端时从主线程访问该图像。 但是我意识到服务器客户端不断请求新帧时,服务器线程会不断保留资源的问题。 因此,我正在考虑仅在网络摄像头捕获到新帧时才响应客户端,以避免上述阻塞问题。
总结一下:
主线程:
1. If Image is available
then - Lock image, copy over new data from webcam, release image
else - goto 1
2. Do processing
服务器:
1. Receive request for new frame from client
2. If (haven't sent the current frame yet)
then - Lock CVD image access, send over frame, release image.
else - wait until new image available.
3. goto 1
我的问题是,这是否是合适的解决方案? 我需要什么来实现呢? 也就是说,当另一个线程正在执行其自身代码的一部分时,如何停止执行代码的某些部分。
更多信息:
我将使用一个循环缓冲区,这样我就可以在读取一帧帧的同时向客户端写入另一帧,假设您不想丢帧。
有关Windows关键部分的信息,请访问http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms682530(v=vs.85).aspx 。
最后,如果您已有代码,为什么不能打开调试信息并重新构建呢? 否则,您将在黑暗中射击,以查找导致崩溃的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.