gpt4 book ai didi

multithreading - D程序中的并发

转载 作者:行者123 更新时间:2023-12-03 13:00:14 26 4
gpt4 key购买 nike

我正在尝试编写一个带有两个线程(主线程和一个在主线程中生成)的简单D程序,其中一个子线程从父线程接收消息。这是我的作品:

import std.stdio;
import core.thread;
import std.concurrency;
import std.c.stdio;

extern (C) int kbhit();

void readSignal(){
for(;;){
bool stop = receiveOnly!bool();
if(!stop)
writeln("reading signal...");
else
writeln("stop reading signal...");
Thread.getThis.sleep(1.seconds);
}
}

int main()
{
auto reader = spawn(&readSignal);
bool stop = false;

while(true){
if(kbhit()){
stop = true;
}

option 1: reader.send(stop);
option 2: send(reader, stop);
}
}


return 0;
}

基本上,我等待键盘敲击,并打算暂停生成的线程。
选项( Andrei Alexandrescu的选项1和 dlang docs中的选项2)都不适合我。我做错了什么?

最佳答案

在我看来,您的主线程旋转非常困难,向读者发送了成千上万条消息。但是,读取器每秒只能读取一个。 “true”消息在大量“false”消息之后进行备份。

对于这种情况,最好使用shared变量,而不要使用消息。两个线程都将能够安全地对其进行读取和写入。

关于multithreading - D程序中的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com