私はDを初めて使用し、練習用の単純なマルチスレッドサーバーを作成しています。Cでクライアントハンドラスレッドを開始するための一般的なパラダイムは、新しく受け入れられたソケットのファイル記述子をpthread_create()に渡すことですが、Dのstd.concurrency.spawn()は、ソケットが変更可能であるため、ソケットを渡すことを許可しません。 2つのスレッドでアクセスできます。
もちろん、私は実際には不変のソケットを望んでいません(そのため、必要がない限り、メインスレッドにキャストしたくないのです)-可変のソケットを渡してスコープ外にしたいメインスレッドで。どうすればいいですか?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) {
...
}
エラー:staticassert「可変スレッドローカルデータへのエイリアスは許可されていません。」...ここからインスタンス化:スポーン!(ソケット)