Thread overview
"Aliases to mutable thread-local data not allowed" when using spawn()
Dec 02, 2012
D_Beginner
Dec 02, 2012
D_Beginner
Dec 02, 2012
Jonathan M Davis
December 02, 2012
Hi there,

I'm quite new do D, but from what I've seen so far, I really like it.
I tried to implement a very basic chatclient that I've written in  Go before, and put the logics to send messages in a send() function, looking like this:

void send(TcpSocket sock) {
	while(true) {
		write("Message: ");
		auto msg = strip(readln());
		sock.send(msg);
	}
}

Of course I need this function to run concurrently for I have to check for answers from the server at the same time. But when I try to launch it in an own thread:

spawn(&send, sock);

I get this strange error:

"Error: static assert "Aliases to mutable thread-local data not allowed""

Why is that? How can I make my function(s) run concurrently if not in that way?

thanks in advance, D_Beginner.
December 02, 2012
On Sunday, 2 December 2012 at 15:47:36 UTC, D_Beginner wrote:
> Hi there,
>
> I'm quite new do D, but from what I've seen so far, I really like it.
> I tried to implement a very basic chatclient that I've written in
>  Go before, and put the logics to send messages in a send() function, looking like this:
>
> void send(TcpSocket sock) {
> 	while(true) {
> 		write("Message: ");
> 		auto msg = strip(readln());
> 		sock.send(msg);
> 	}
> }
>
> Of course I need this function to run concurrently for I have to check for answers from the server at the same time. But when I try to launch it in an own thread:
>
> spawn(&send, sock);
>
> I get this strange error:
>
> "Error: static assert "Aliases to mutable thread-local data not allowed""
>
> Why is that? How can I make my function(s) run concurrently if not in that way?
>
> thanks in advance, D_Beginner.

Alright, I changed from std.concurrency to std.parallelism and it works fine.
December 02, 2012
On Sunday, December 02, 2012 16:47:35 D_Beginner wrote:
> Hi there,
> 
> I'm quite new do D, but from what I've seen so far, I really like
> it.
> I tried to implement a very basic chatclient that I've written in
>   Go before, and put the logics to send messages in a send()
> function, looking like this:
> 
> void send(TcpSocket sock) {
> 	while(true) {
> 		write("Message: ");
> 		auto msg = strip(readln());
> 		sock.send(msg);
> 	}
> }
> 
> Of course I need this function to run concurrently for I have to check for answers from the server at the same time. But when I try to launch it in an own thread:
> 
> spawn(&send, sock);
> 
> I get this strange error:
> 
> "Error: static assert "Aliases to mutable thread-local data not allowed""
> 
> Why is that? How can I make my function(s) run concurrently if
> not in that way?
> 
> thanks in advance, D_Beginner.

Read this:

http://www.informit.com/articles/article.aspx?p=1609144

- Jonathan M Davis