首页 > 解决方案 > 被调用函数中线程处理中的索引

问题描述

下一个问题:

现在我有了带有全局结构的“car_park”。

struct seat {
  int size;
  int color;
};

struct car {
  int count_of_seats;
  struct seat *seats;
};

struct car_park {
  int count_of_cars;
  struct car *cars;
};

我读取一个文件,分配必要的内存并将其保存到结构中。

现在我想执行一个函数。此函数应作为 5 个线程执行

func(){
  ...
}

void main(){
  struct car_park my;
  pthread_t th_read[5];

  read_current_cars(&my);  // write data from file into struct (e.g. array of 5 cars)
   while(1){
      for (i= 0; i<5; i++){
          pthread_create (&th_read[i], NULL, func, &my);
      }
   }
}

我该如何编程,第一个线程使用第一辆汽车,第二个线程使用第二辆汽车......如果我使用 struct car_park 中的变量来增加,它不起作用。该变量在第一个线程启动之前递增。

谁能帮我?

安德烈

标签: arraysmultithreadingstruct

解决方案


将所有车辆排成队列。同步队列访问(将所有队列读/写包装到互斥锁中)。让你的线程func()从队列中拉出汽车并做任何你需要做的事情。不能保证线程 1 会得到汽车 1,但老实说,我认为这并不重要。


推荐阅读