As best I can tell.
We use POSIX interface to threads. We join on the threads all the time. At
some points of execution, I can say we are creating and destroying 5 threads
a second, potentially over an extended period of time with no ill effects.
All threads are joined, but we don't do much in the way of cleanup so its
not a tough test. Threads are encapsulated in a C++ object, using static
methods for callbacks.
Lessons learned
1) Consider ECOS threads directly if you can. POSIX threads aren't named
and makes debugging easier.
2) We need to clean up our thread per task algorithm. (yeah, sure, when we
have time).