mirror of
https://github.com/kerberos-io/openalpr-base.git
synced 2025-10-06 15:16:52 +08:00
Fixed race condition bug on multithreading
This commit is contained in:
@@ -159,16 +159,13 @@ void plateAnalysisThread(void* arg)
|
||||
int loop_count = 0;
|
||||
while (true)
|
||||
{
|
||||
|
||||
if (dispatcher->hasPlate() == false)
|
||||
PlateRegion plateRegion;
|
||||
if (dispatcher->nextPlate(&plateRegion) == false)
|
||||
break;
|
||||
|
||||
if (dispatcher->config->debugGeneral)
|
||||
cout << "Thread: " << tthread::this_thread::get_id() << " loop " << ++loop_count << endl;
|
||||
|
||||
// Get a single plate region from the queue
|
||||
PlateRegion plateRegion = dispatcher->nextPlate();
|
||||
|
||||
Mat img = dispatcher->getImageCopy();
|
||||
|
||||
timespec platestarttime;
|
||||
|
@@ -109,22 +109,18 @@ class PlateDispatcher
|
||||
return img;
|
||||
}
|
||||
|
||||
bool hasPlate()
|
||||
{
|
||||
bool plateAvailable;
|
||||
mMutex.lock();
|
||||
plateAvailable = plateRegions.size() > 0;
|
||||
mMutex.unlock();
|
||||
return plateAvailable;
|
||||
}
|
||||
PlateRegion nextPlate()
|
||||
|
||||
bool nextPlate(PlateRegion* plateRegion)
|
||||
{
|
||||
tthread::lock_guard<tthread::mutex> guard(mMutex);
|
||||
|
||||
PlateRegion plateRegion = plateRegions[plateRegions.size() - 1];
|
||||
if (plateRegions.size() == 0)
|
||||
return false;
|
||||
|
||||
*plateRegion = plateRegions[plateRegions.size() - 1];
|
||||
plateRegions.pop_back();
|
||||
|
||||
return plateRegion;
|
||||
return true;
|
||||
}
|
||||
|
||||
void appendPlate(PlateRegion plate)
|
||||
|
Reference in New Issue
Block a user