取消引用ptread_create使用的struct中的数组

时间:2013-02-24 22:21:43

标签: c struct pthreads dereference

我的ThreadData结构:

typedef struct threadData {
    pthread_t *ths;
} threadData;

其中* ths是pthread_t的数组。

现在,我创建一个线程,使用以下函数作为动作,在[1]

中创建一个新线程
void *rootThread(threadData *d) {
    pthread_t *b = (*d).ths;
    pthread_create(*(b+1),NULL,someRandomFunction,NULL);
}

但这似乎不起作用。

我不确定我是否正好取消引用pthread_t元素。请帮忙!

谢谢,:)。

2 个答案:

答案 0 :(得分:1)

看起来(例如)你没有分配。你必须做这样的事情:

void* Thread(void* theCUstom);

pthread_t* threadHandle = malloc(sizeof(pthread_t));
pthread_mutex_t mutex; // mutex lock
pthread_attr_t attr;   // thread attributes
pthread_mutex_init(&mutex, NULL);
pthread_attr_init(&attr);
unsigned long errRes = pthread_create(threadHandle, &attr, Thread, yourCustom);

答案 1 :(得分:0)

您无法维护pthread_t以此方式使用的索引。每次重新进入rootThread()时,b + 1将保持不变。您可能需要在threadData中使用单独的索引变量,或者可以在列表中迭代的第二个指针。要么是,要么不要制作临时变量pthread_t * b。

typedef struct threadData {
    pthread_t *ths;
    int thsIdx;
} threadData;

void *rootThread(threadData *d) {
    pthread_create( &d->ths[d->thsIdx++],NULL,someRandomFunction,NULL);
}

或者你的方式:

 void *rootThread(threadData *d) {
    pthread_create( d->ths, NULL, someRandomFunction, NULL);
    ++d->ths; // this is nasty because you lose the pointer to the beginning of the array.
}