我有一個多點觸摸應用程序。它有3個ccv應用程序向它發送udp數據包。創建的應用程序通過多線程的ofxTuio接收所有這些數據包。然後,這些觸及到我們在單個線程中編寫的代碼中。我們有顯示對象。它們每個都有一個包含指向它們包含的所有對象的指針的列表。例如,我們寫了onEnterFrame,addChild,removeChild;功能與您在動作中看到的顯示列表語法類似。但是,由於多線程tuio事件,我們正在迭代對象列表中的錯誤(併發)問題。我們如何防止這種情況發生。看起來好像鎖定(互斥)不會是正確的,因爲這些列表不在多線程上訪問。我爲這個列表創建了一個自定義隊列,他們從不迭代,而對象被刪除或添加到列表中,有幾個布爾值和一些額外的隊列列表。我懷疑人們遇到過這樣的事情,什麼是適當的做法?C++。多線程瓶頸縮小到列表中的單線程應用程序
0
A
回答
2
如果您有多個線程,標誌是不夠的。使用互斥鎖或其他關鍵部分來鎖定讀取和寫入訪問。如果您有任何異步或未經請求的事件,這就是他們的目標。
1
使用互斥鎖或原子compare_and_swap指令使您的數據結構是線程安全的。
0
如果您使用std :: list,但從列表中刪除不會使迭代器失效,事實上,您必須迭代正在被刪除的元素才能產生問題。如果你可以在單線程上構造你的算法來處理它,這可能就足夠了。
我很好奇你會得到什麼樣的迭代器錯誤,你會得到不兼容的錯誤?顯示對象如何獲取他們的列表?通過這個隊列?一旦對象有列表可以更改列表?
相關問題
- 1. Jython中隱藏的多線程瓶頸?
- 2. 瓶頸上的Tensorflow:多線程錯誤
- 3. 查找.NET多線程瓶頸
- 4. 瓶頸3000+線程.NET應用程序(HttpWebReqsuest.BeginGetResponse)
- 5. 瓶頸應用程序與後臺線程
- 6. 並行程序:如何找到瓶頸(CPU綁定線程)
- 7. C++中的多線程應用程序
- 8. 如何找到多線程服務中的瓶頸?
- 9. 單線程C多線程#
- 10. 單線程到多線程應用程序
- 11. 線程化瓶子應用程序
- 12. 多線程應用程序 - C++/Debian的
- 13. 的HelloWorld多線程C#應用程序
- 14. Web應用程序的瓶頸?
- 15. C多線程應用程序結構
- 16. 多線程c#應用程序
- 17. c#多線程應用程序
- 18. C#應用程序線程
- 19. 多線程應用程序
- 20. 使用單線程多線程C編寫程序#
- 21. 多線程c#應用程序中的懶惰單例
- 22. 爲什麼鎖定可能會成爲多線程程序的瓶頸?
- 23. C#Winform多線程序列
- 24. c#windows應用程序中的線程
- 25. 多線程應用程序中的System.setproperty
- 26. 多線程應用程序中的SetCurrentDirectory
- 27. Java中的多線程應用程序?
- 28. 多線程應用程序中的EntityManager?
- 29. Websphere應用程序中的單線程
- 30. C++ Pthreads - 多線程比單線程慢