使用信号量增强的生产者 - 消费者(消费者的最小项目)

时间:2015-11-30 21:36:12

标签: multithreading operating-system mutex semaphore producer-consumer

我正在使用信号量解决生产者 - 消费者问题以及其他条件。例如:消费者无法读取缓冲区,直到其中至少有3个元素。我的问题是:这些条件是否可以在其他信号量上仅使用down()和up()操作轻松表达?要指定:我使用的信号量来自POSIX< semaphore.h>。它们不支持负信号量值。

到目前为止,我提出了这个问题:

private void detectColoredBlob () { 
     Mat hsvImage = new Mat(); 
     Imgproc.cvtColor(rgbaFrame, hsvImage, Imgproc.COLOR_RGB2HSV_FULL);

     Mat maskedImage = new Mat(); 
     Scalar lowerThreshold = new Scalar(100, 120, 120); 
     Scalar upperThreshold = new Scalar(179, 255, 255); 
     Core.inRange(hsvImage, lowerThreshold, upperThreshold, maskedImage);

     Mat dilatedMat= new Mat(); 
         //List<MatOfPoint> contours = new ArrayList<>(); 
         List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
         Mat outputHierarchy = new Mat(); 
         Imgproc.dilate(maskedImage, dilatedMat, new Mat() ); 
         Imgproc.findContours(dilatedMat, contours, outputHierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); 

         Log.i(TAG, "IPAPP detectColoredBlob() outputHierarchy " + outputHierarchy.toString());

         /*for ( int contourIndex=0; contourIndex < contours.size(); contourIndex++ ) {
            //if(contours.get(contourIndex).size()>100) { //ERROR The operator > is undefined for the argument type(s) Size, int
                 Imgproc.drawContours ( rgbaFrame, contours, contourIndex, new Scalar(0, 255, 0), 4); 
            //} 
         }*/

     Bitmap bitmap = Bitmap.createBitmap(rgbaFrame.rows(), rgbaFrame.cols(), Bitmap.Config.ARGB_8888); 
     Utils.matToBitmap(maskedImage, bitmap); 
     imageView.setImageBitmap(bitmap); 
}

它有效,但消费者有时间,他只花时间发现他什么也做不了。我们可以避免这种情况吗?

感谢您的帮助!

0 个答案:

没有答案