假设我在内存中有一个数据结构S. S很复杂,比如树或图。我有两个线程穿过S,他们可能会碰到并尝试同时读取相同的地址。我的问题是:是否有任何在这一点上的隐式锁定的类型,使线程之间的争用产生?如果它是有价值的,我在普通的SMP机器上使用C,pthreads。阅读是否涉及多线程应用程序中的任何锁定?
3
A
回答
3
不需要使用只读操作进行锁定。
如果你明确地实现它,只会有锁定。这通常会在另一个线程同时修改(写入)结构的时候完成。
0
如果没有修改,读取总是线程安全的。
0
首先,在C中没有隐式锁定。C是一个“这里是绳索”语言,因为你总是可以自由地挂上自己。
此外,请注意,没有锁定的阅读是安全的,当你是从来没有写作。如果你改变了这些数值,那么读数可能会导致你错误的数值。
最后,两个很酷的工具可帮助您决定在不确定时是否需要锁定DRD和helgrind(valgrind工具)。这两种都是线程工具,可以检测各种线程相关的错误。只要知道他们会在敏感方面犯错。
相关问题
- 1. SQL INSERT是否涉及任何读/写锁?
- 2. MQ锁定减慢阅读器程序
- 3. 当win7被锁定时,多线程应用程序会永久循环是否有任何理由?
- 4. 多线程以及多进程的Java文件锁定方式
- 5. 如何确定线程是否有锁?
- 6. 理想的线程结构问题(涉及多线程通信)
- 7. 如何在我的应用程序中启用离线阅读?
- 8. 锁定Web客户端 - 多线程应用程序
- 9. 多线程程序中的锁()
- 10. 如何在我的应用程序中实现离线阅读
- 11. 是否有涉及事件处理的单独线程?
- 12. PThreads:读/写锁:如何检查线程是否持有写锁?
- 13. 多线程应用程序中的静态计数器线程是否安全?
- 14. 一位作家,无锁应用程序中的多个阅读器
- 15. Android - 如何阅读应用程序类中的程序包名
- 16. 异步需要涉及多线程还是并行?
- 17. 多线程应用程序中的SQLite“数据库已锁定”错误
- 18. 如何确定应用程序是否是Web应用程序
- 19. 什么是多线程应用程序?
- 20. 线程锁定在大Parralel应用程序中
- 21. 锁定多个线程
- 22. 无法锁定简单多线程程序中的错误
- 23. 如何在directshow应用程序中设置读取锁定和写入锁定?
- 24. 使用Drupal有多少涉及编程?
- 25. 如何调试挂起(死锁)的C++中的多线程应用程序?
- 26. Java中的多线程应用程序?
- 27. 多线程应用程序中的SetCurrentDirectory
- 28. 多线程应用程序中的System.setproperty
- 29. 在我的应用程序中安装Crystal - 涉及什么?
- 30. Android锁定应用程序