如果有一些代码是2个线程同时试图写入同一个对象,我的理解是它不会产生任何编译时错误,这也是调试多线程程序如此的部分原因难的。但这会产生运行时错误/异常吗?
谁能推荐任何好的多线程调试技术?
谢谢。
最佳答案
从两个或多个不同线程内部访问同一个对象不会在运行时或调试器中产生错误,但它很可能会以您不希望的方式破坏对象。
在多线程环境中安全地处理它的方法是使用互斥量和信号量。 对于互斥锁,检查 wikipedia link .
当您想限制一次只能由一个线程访问一个对象时,通常会使用互斥锁。
另一方面,信号量是一种更通用的情况(互斥量实际上是信号量的一种特殊情况),它有一个计数器,每个线程都会根据信号量的激活/停用而增加/减少。当信号量达到 0 时,它将锁定自己和导致它的线程。有关信号量的更多信息,请查看 wikipedia page
如果您需要更具体的建议,那么我建议您向我们提供有关您所针对的操作系统和/或您正在使用的 API 的信息,因为与线程(互斥锁、信号量等)有关的任何事情都是特定于操作系统的
关于c++ - 调试多线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288365/