www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - std.concurrency.receive and shared const(char)[]?

reply BakedPineapple <bakedpineapple airmail.cc> writes:
import std.stdio;
import std.concurrency;

void main()
{
	auto t = spawn((){
		receive((shared const(char)[] char_arr) {
			ownerTid.send(true);
		});
	});
	shared const(char)[] char_arr = "cut my code into pieces";
	t.send(char_arr);
	assert(receiveOnly!(bool) == true);
}

When I run this program, it blocks on the receive() inside the 
spawned thread. What am I doing wrong?
Jun 28 2020
parent reply Anonymouse <zorael gmail.com> writes:
On Sunday, 28 June 2020 at 16:11:50 UTC, BakedPineapple wrote:
 import std.stdio;
 import std.concurrency;

 void main()
 {
 	auto t = spawn((){
 		receive((shared const(char)[] char_arr) {
 			ownerTid.send(true);
 		});
 	});
 	shared const(char)[] char_arr = "cut my code into pieces";
 	t.send(char_arr);
 	assert(receiveOnly!(bool) == true);
 }

 When I run this program, it blocks on the receive() inside the 
 spawned thread. What am I doing wrong?
Make the parameter shared(const(char))[] and it will work. I'll leave it to someone who knows more to explain why it behaves that way.
Jun 28 2020
parent BakedPineapple <bakedpineapple airmail.cc> writes:
On Sunday, 28 June 2020 at 16:39:12 UTC, Anonymouse wrote:
 On Sunday, 28 June 2020 at 16:11:50 UTC, BakedPineapple wrote:
 import std.stdio;
 import std.concurrency;

 void main()
 {
 	auto t = spawn((){
 		receive((shared const(char)[] char_arr) {
 			ownerTid.send(true);
 		});
 	});
 	shared const(char)[] char_arr = "cut my code into pieces";
 	t.send(char_arr);
 	assert(receiveOnly!(bool) == true);
 }

 When I run this program, it blocks on the receive() inside the 
 spawned thread. What am I doing wrong?
Make the parameter shared(const(char))[] and it will work. I'll leave it to someone who knows more to explain why it behaves that way.
ty.
Jun 28 2020