![](/img/trans.png)
[英]Why can a local variable be accessed in another thread created in the same class?
[英]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.