【问题标题】:What will happen if I call pthread_join() on an unused pthread_t?如果我在未使用的 pthread_t 上调用 pthread_join() 会发生什么?
【发布时间】:2012-04-18 01:34:23
【问题描述】:

假设我有一个声明的 pthread_t 结构,如下所示:

pthread_t newThread;

然后我打电话:

pthread_join(&newThread, NULL, myMethod, NULL);

pthread_join() 会做什么?

【问题讨论】:

    标签: c++ c pthreads


    【解决方案1】:

    根据 ISO C,newThread 变量是一个“不确定值对象”,使用它会触发未定义的行为。它可能具有触发 CPU 异常的“陷阱表示”。

    或者它可能只是被解释为该类型的随机值,API 可以通过以下两种方式之一处理:要么没有这样的线程,并且返回 ESRCH,要么侥幸有这样的线程.然后出现各种情况:是否可以加入等等。

    【讨论】:

    • 不错的收获。我不认为初始不确定值可能只发生在有效线程上。
    • 衡量程序员的标准不是他们的聪明才智和逻辑,而是他们案例分析的完整性。 Alan J. Perlis,Epigram #32。
    【解决方案2】:

    如果将 pthread_join 调用为未初始化的 pthread_t,则行为未定义。

    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多