【问题标题】:Passing multiple arguments to a thread from a structure将多个参数从结构传递给线程
【发布时间】:2011-09-22 01:17:47
【问题描述】:

我在使用包含另一个结构的结构传递参数时遇到问题

我知道我使用这些结构的方式有问题,但我就是看不到在哪里......

谢谢!

这是我的结构

typedef struct {
IMAGE *imagenfte;
IMAGE *imagendst;
}thread_data;

//thread_data *data = (thread_data *) malloc(sizeof(thread_data));

这是另一个结构

 typedef struct {
    HEADER header;
    INFOHEADER infoheader;
    PIXEL *pixel;
    } IMAGE;

IMAGE imagenfte,imagendst;

这是我的线程函数

void *processBMP2(void *argumentos) 
{
thread_data *my_data;
my_data =  (thread_data *) (argumentos);
IMAGE *imagefte, *imagedst;
imagefte =  my_data->imagenfte;
imagedst = my_data->imagendst;
free(my_data);
int i,j;
int count=0;
PIXEL *pfte,*pdst;
PIXEL *v0,*v1,*v2,*v3,*v4,*v5,*v6,*v7;
int imageRows,imageCols;
memcpy(imagedst,imagefte,sizeof(IMAGE)-sizeof(PIXEL *));
imageRows = imagefte->infoheader.rows;
imageCols = imagefte->infoheader.cols;
imagedst->pixel=(PIXEL *)malloc(sizeof(PIXEL)*imageRows*imageCols);
...

这就是我创建线程和传递参数的方式

     pthread_t hilo;

thread_data *my_data = (thread_data *) malloc(sizeof(thread_data));

my_data->imagenfte = &imagenfte;
my_data->imagendst = &imagendst;

pthread_create(&hilo,NULL, processBMP2, my_data);

//processBMP(&imagenfte,&imagendst);

【问题讨论】:

标签: c multithreading struct arguments


【解决方案1】:

你所做的完全正确。新线程需要负责释放内存,因为父线程无法知道新线程何时完成对它的访问。

【讨论】:

  • 这取决于线程是否可以加入...如果是,那么父线程可以在加入终止线程后释放内存。
  • 嗯,是的,有很多方法可以同步,让父母负责释放它。即使使用分离的线程,如果结构包含与父级通信的同步对象,父级也可以知道何时释放它是合法的。但是对于像 OP 这样使用的单向参数传递结构,让新线程释放它可能是最干净的。
猜你喜欢
  • 2021-06-30
  • 1970-01-01
  • 2017-05-25
  • 2018-04-17
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
相关资源
最近更新 更多