我的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元素。请帮忙!
谢谢,:)。
答案 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.
}