Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: minor edits; reviewed

The C Standard, subclause 7.26.5.6 [ISO/IEC 9899:2011], specifically states that a thread shall not be joined once it was previously joined or detached. Similarly, subclause 7.26.5.3 states that a thread shall not be detached once it was previously joined or detached.  Violating either of these clauses results in undefined behavior.

Noncompliant Code Example

The following code example exhibits undefined behavior by detaching This noncompliant code example detaches a thread that is later joined. Performing this action can lead to undefined behavior.

Code Block
bgColor#ffcccc
langc
#include <threads.h>
 
int thread_func(void *arg) {
  /* Do work */
  thrd_detach(thrd_current());
  return 0;
}

int main(void) {
  thrd_t t;

  if (thrd_success != thrd_create(&t, thread_func, 0)) {
    /* Handle error */
    return 0;
  }

  if (thrd_success != thrd_join(t, 0)) {
    /* Handle error */
    return 0;
  }

  return 0;
}

Compliant Solution

 In this  This compliant solution , does not detach the thread is not detached. Its resources are released upon successfully joining with the main thread.

...