On 6/10/11 1:37 AM, Steven Schveighoffer wrote:
t.join() ?
http://www.digitalmars.com/d/2.0/phobos/core_thread.html#join
Doesn't work, in my application I'm a) using std.concurrency, and b)
even that is hidden behind the API I want to test. A better example
would probably be the following, which crashes before reaching 600
iterations on my Arch Linux VM:
---
import std.concurrency;
void doNothing() {}
void main() {
foreach (i; 0 .. 1_000_000) {
spawnLinked(&doNothing);
receive((LinkTerminated t){});
}
}
---
I realize that spawn()ing lots of threads without causing much GC
activity may be an edge case that probably only occurs during testing,
but I'd still be interested in a workaround. (GC.collect() to collect
the remaining Thread objects and thus cause the threads to be detach()ed
unfortunately breaks on OS X:
http://d.puremagic.com/issues/show_bug.cgi?id=6135).
AFAIK, a thread cannot go away until you join it, because it still has
to give you its exit status.
Not if you call pthread_detach(), after which calls to pthread_join()
are defined to be invalid.
David