这不对。它导致编号不是 0 索引的。
#define MY_THREAD_COUNT 6
void *runner(void *param) {
int id = *(int*)param;
printf("Thread %d\n", id);
}
int main() {
pthread_t thread_arr[MY_THREAD_COUNT];
for (int i = 0; i < MY_THREAD_COUNT; i++)
pthread_create(&thread_arr[i], NULL, runner, &i);
for (int i = 0; i < MY_THREAD_COUNT; i++)
pthread_join(thread_arr[i], NULL);
}
这确实工作正常:
for (int i = 0; i < MY_THREAD_COUNT; i++) {
int *tmp = malloc(sizeof(int));
*tmp = i;
pthread_create(&thread_arr[i], NULL, runner, tmp);
}
然而,mallocing,leaking,yada yada。这不是我理想的解决方案。
有没有办法从
runner()
内部调用的函数中获取ID号?像 pthread_self()
这样的东西,但它会给出序列号,0 到 n - 1?
或者更一般地说,最干净的方法是什么(桌上的任何答案)?