summaryrefslogtreecommitdiff
path: root/hurd/libthreads.mdwn
blob: aa429d8103ba5c4f621219d6fcc5c43c07baf764 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[[!meta copyright="Copyright © 2011, 2012, 2013 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

`libthreads` a.k.a. C threads.

**Note**: since Hurd migrated to [[libpthread]] as threading library,
the development and usage of libthreads has been discontinued.



# Internals

## Threading Model

libthreads has a 1:1 threading model.


## Threads' Death

A thread's death doesn't actually free the thread's stack (and maybe not the
associated Mach ports either).  That's because there's no way to free the stack
after the thread dies (because the thread of control is gone); the stack needs
to be freed by something else, and there's nothing convenient to do it.  There
are many ways to make it work.

However, it isn't really a leak, because the unfreed resources do get used for
the next thread.  So the issue is that the shrinkage of resource consumption
never happens, but it doesn't grow without bounds; it just stays at the maximum
even if the current number of threads is lower.

The same issue exists in [[libpthread]].