我有一个多点触摸应用程序。它有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 - 多线程比单线程慢