簡體   English   中英

為什么本地創建的結構不能發送到另一個線程?

[英]Why locally created struct can't be send to another thread?

為什么在DI中無法通過Tid.send本地結構實例發送到另一個線程? 我想像這樣簡單處理線程通信:

void main()
{
    ...
    tid.send(Command.LOGIN, [ Variant("user"), Variant("hello1234") ] );
    ...
}

void thread()
{
    ...
    receive(
       (Command cmd, Variant[] args) { ... })
    )
    ...
}

如果我理解正確,D應該在堆棧中創建變量數組,然后復制數組內容的發送功能嗎? 所以不應該有任何關於同步和並發的問題。 我很安靜,這種並發很奇怪,我習慣用C#和C中的線程編碼。

此外,我對shared關鍵字和創建共享類感到困惑。 通常,當我嘗試從非共享對象調用共享類實例的方法時,編譯器會拋出錯誤。 為什么?

你應該idup數組,它將能夠通過,普通數組是默認可共享的(因為他們有一個共享的可變間接)

因為編譯器可以重寫發送為

Variant[] variants = [ Variant("user"), Variant("hello1234") ] ;
tid.send(Command.LOGIN, variants);

和Variant []未通過hasUnsharedAlias測試

你可以通過使數組共享或不可變(並在另一側接收適當的數組)來解決這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM