我是 D 新手,我正在编写一个简单的多线程服务器进行练习。在 C 中启动客户端处理程序线程的一个常见范例是将新接受 () 的套接字的文件描述符传递给 pthread_create(),但 D 的 std.concurrency.spawn() 不允许我传递套接字,因为它是可变的并由两个线程访问。
当然,我实际上并不想要一个不可变的套接字(这就是为什么我真的不想在主线程中强制转换它,除非我必须这样做) - 我想传递一个可变的套接字并让它超出范围在主线程中。我该怎么办?应该(/可以)我tid.send(s)
用来让线程使用套接字吗?出于某种原因,这对我来说似乎很笨拙。
我现在的代码:
void main() {
Socket listener = new TcpSocket;
...
for (;;) {
Socket s = listener.accept();
scope(exit) s.close();
auto tid = spawn(&clientHandler, s);
}
}
void clientHandler(Socket s) {
...
}
这会产生:错误:静态断言“不允许使用可变线程本地数据的别名。” ...从这里实例化:spawn!(Socket)