搜索过,但没有遇到令人满意的答案.
我知道没有一种可移植的方式来打印pthread_t.
你是如何在你的应用程序中做到的?
更新:
其实我不需要pthread_t,而是一些小的数字id,在调试消息中识别不同的线程.
在我的系统(64位RHEL 5.3)上,它被定义为unsigned long int,因此它是大数字,只是打印它在调试行中占有一席之地.gdb如何分配短时间?
非常不言自明的问题。例如,pthread_create 的标头显示它需要一个指向线程的指针:
int WINPTHREAD_API pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(* func)(void *), void *arg);
Run Code Online (Sandbox Code Playgroud)
好的,有道理,您在内存中分配一个 pthread,然后传递一个指向 pthread_create 的指针,以便它被初始化......但现在查看 pthread_join 的标头:
int WINPTHREAD_API pthread_join(pthread_t t, void **res);
Run Code Online (Sandbox Code Playgroud)
它需要 pthread_t 的副本。我只是不明白为什么它不使用指向已经存在的线程的指针,而不是复制它并传递它;似乎这样做会导致更多问题和更多内存使用。我错过了什么吗?我阅读了联机帮助页,它似乎没有提供这样做的原因。