D中很容易使用std.container.dlist
創建隊列類型。使用隊列在D中的線程之間進行通信
我想有多個線程,但讓他們與隊列通信,而不是消息傳遞(https://tour.dlang.org/tour/en/multithreading/message-passing)。據我所知,這些消息的設計始終是在代碼中的特定點處接收數據;接收線程將阻塞,直到收到預期的數據。 (編輯:我被告知有關receiveTimeout但沒有超時,只是一個檢查是真的在這種情況下更合適(也許超時0?)。我也不知道如果多個消息API將做什麼消息發送任何任何接收之前,我將不得不與該打。)
void main() {
spawn(&worker, thisTid);
// This line will block until the expected message is received.
receive (
(string message) {
writeln("Received the message: ", text);
},
)
}
我所需要的僅僅接收數據,如果有一些。事情是這樣的:
void main() {
Queue!string queue// custom `Queue` type based on DList
spawn(&worker, queue);
while (true) {
// Go through any messages (while consuming `queue`)
for (string message; queue) {
writeln("Received a message: ", text);
}
// Do other stuff
}
}
我一直在使用shared
變量(https://tour.dlang.org/tour/en/multithreading/synchronization-sharing)嘗試,但DMD抱怨說:「不許別名可變線程本地的數據。」或其他一些錯誤,具體情況。
這將如何在D中完成?或者,有沒有辦法使用消息來進行這種溝通?
不,這不是我真正需要的,但我確實想念'receiveTimeout'我不知道如何。如果我無法獲得其他任何工作,我可能會使用'receiveTimeout'來完成我所需要的工作。 –
給receiveTimout一個負值,如-1會做你想做的。請參閱:https://stackoverflow.com/a/31624806/2026276 – Bauss