Function std.concurrency.spawn
Starts fn(args) in a new logical thread.
Executes the supplied function in a new logical thread represented by
Tid
. The calling thread is designated as the owner of the new thread.
When the owner thread terminates an OwnerTerminated
message will be
sent to the new thread, causing an OwnerTerminated
exception to be
thrown on receive()
.
Parameters
Name | Description |
---|---|
fn | The function to execute. |
args | Arguments to the function. |
Returns
A Tid representing the new logical thread.
Notes
args
must not have unshared aliasing. In other words, all arguments
to fn
must either be shared
or immutable
or have no
pointer indirection. This is necessary for enforcing isolation among
threads.
Similarly, if fn
is a delegate, it must not have unshared aliases, meaning
fn
must be either shared
or immutable
.
Example
static void f(string msg)
{
writeln(msg); // "Hello World"
}
auto tid = spawn(&f, "Hello World");
Example
Fails
char[] has mutable aliasing.
string msg = "Hello, World!";
static void f1(string msg) {}
static assert(!__traits(compiles, spawn(&f1, msg .dup)));
static assert( __traits(compiles, spawn(&f1, msg .idup)));
static void f2(char[] msg) {}
static assert(!__traits(compiles, spawn(&f2, msg .dup)));
static assert(!__traits(compiles, spawn(&f2, msg .idup)));
Example
New thread with anonymous function
spawn({
ownerTid .send("This is so great!");
});
writeln(receiveOnly!string); // "This is so great!"
Authors
Sean Kelly, Alex Rønne Petersen, Martin Nowak