假设我有一个申报的pthread_t结构,如下所示:如果我在未使用的pthread_t上调用pthread_join()会发生什么情况?
pthread_t newThread;
然后我打电话:
pthread_join(&newThread, NULL, myMethod, NULL);
什么会在pthread_join()呢?
假设我有一个申报的pthread_t结构,如下所示:如果我在未使用的pthread_t上调用pthread_join()会发生什么情况?
pthread_t newThread;
然后我打电话:
pthread_join(&newThread, NULL, myMethod, NULL);
什么会在pthread_join()呢?
根据ISO C,newThread
变量是一个“不确定值的对象”,其使用会触发未定义的行为。它可能具有触发CPU异常的“陷阱表示”。
或者它可能只是被解释为该类型的随机值,API可以通过以下两种方式之一处理:或者没有这样的线程,并且返回ESRCH
,或者通过侥幸存在这样的线程。然后出现各种情况:是否可连接等。
如果您将pthread_join称为未初始化的pthread_t,则行为未定义。
正确:http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.html – kay 2012-04-18 02:02:30
你试过了吗? – Makoto 2012-04-18 01:34:44