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 | ||||
|---|---|---|---|---|
| ||||
#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.
...