多线程本地图片加载示例【OpenCV】【Pthread】

简介: 多线程本地图片加载示例【OpenCV】【Pthread】

Pthread barrier的简单使用示例:


C++代码如下:

// ThreadingLoadImages.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <pthread.h>
#include <opencv2/opencv.hpp>
#define THREADS 3
// Barrier variable
pthread_barrier_t barr;
struct Param
{
  cv::Mat img;
  int index;
  char* file_path;
} params[THREADS];
void* entry_point(void* arg)
{
  Param* p = (Param*)arg;
  int index = p->index;
  char* file_path = p->file_path;
  p->img = cv::imread(file_path);
  printf("The %d thread is doing job! \n", index);
  // Synchronization point
  int rc = pthread_barrier_wait(&barr);
  if (rc != 0 && rc != PTHREAD_BARRIER_SERIAL_THREAD)
  {
    printf("Could not wait on barrier\n");
    exit(-1);
  }
}
int main()
{
  pthread_t thr[THREADS];
  //pthread_mutex_init(&g_mtx, NULL);
  // Barrier initialization
  if (pthread_barrier_init(&barr, NULL, THREADS))
  {
    printf("Could not create a barrier\n");
    return -1;
  }
  //int t[THREADS];
  params[0].file_path = "../micky.png";
  params[1].file_path = "../umbrella.png";
  params[2].file_path = "../beard.jpg";
  for (int i = 0; i < THREADS; ++i)
  {
    //t[i] = i;
    params[i].index = i;
    if (pthread_create(&thr[i], NULL, &entry_point, (void *)&params[i]))
    {
      printf("Could not create thread %d\n", i);
      return -1;
    }
  }
  for (int i = 0; i < THREADS; ++i)
  {
    if (pthread_join(thr[i], NULL))
    {
      printf("Could not join thread %d\n", i);
      return -1;
    }
  }
  printf("All threads finish jobs! \n");
  for(int i=0; i<THREADS; i++)
    cv::imshow(params[i].file_path, params[i].img);
  cv::waitKey(0);
    return 0;
}

效果如图:

image.png

相关资料:pthread线程使用小结 

目录
相关文章
|
6月前
|
Linux C++
LInux下Posix的传统线程示例
LInux下Posix的传统线程示例
51 1
|
6月前
|
安全 Java
并发编程之常见线程安全类以及一些示例的详细解析
并发编程之常见线程安全类以及一些示例的详细解析
67 0
|
20天前
|
安全 程序员 API
|
3月前
|
存储 安全 Unix
并发编程基础:使用POSIX线程(pthread)进行多线程编程。
并发编程基础:使用POSIX线程(pthread)进行多线程编程。
88 0
|
5月前
|
Java
死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`
【6月更文挑战第20天】死锁是线程间争夺资源造成的无限等待现象,Java示例展示了两个线程各自持有资源并等待对方释放,导致死锁。`volatile`保证变量的可见性和部分原子性,确保多线程环境中值的即时更新。与`synchronized`相比,`volatile`作用于单个变量,不保证原子操作,同步范围有限,但开销较小。`synchronized`提供更全面的内存语义,保证原子性和可见性,适用于复杂并发控制。
43 3
|
4月前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
5月前
|
存储 Java
Java线程池参数详解及其示例
Java线程池参数详解及其示例
|
6月前
|
Python
Python中的多线程可以使用`threading`模块来实现。以下是一个简单的多线程示例,该示例启动两个线程并让它们分别打印数字。
在Python中,使用`threading`模块可实现多线程。以下代码展示了一个简单的例子:创建两个线程`t1`和`t2`,分别打印1-6和6-11的数字。通过`target`参数指定执行函数`print_numbers`,`args`传递参数。启动线程后,用`join()`确保线程执行完毕。注意,多线程访问共享资源可能引发数据竞争,需用锁进行同步控制。
53 0
|
6月前
|
存储 Java
什么是线程池,线程池的状态,线程池的用法示例
什么是线程池,线程池的状态,线程池的用法示例
|
Python
使用Python多线程的简单示例
使用Python多线程的简单示例
50 1