c++ - 调试多线程程序

标签 c++ multithreading

如果有一些代码是2个线程同时试图写入同一个对象,我的理解是它不会产生任何编译时错误,这也是调试多线程程序如此的部分原因难的。但这会产生运行时错误/异常吗?

谁能推荐任何好的多线程调试技术?

谢谢。

最佳答案

从两个或多个不同线程内部访问同一个对象不会在运行时或调试器中产生错误,但它很可能会以您不希望的方式破坏对象。

在多线程环境中安全地处理它的方法是使用互斥量和信号量。 对于互斥锁,检查 wikipedia link .

当您想限制一次只能由一个线程访问一个对象时,通常会使用互斥锁。

另一方面,信号量是一种更通用的情况(互斥量实际上是信号量的一种特殊情况),它有一个计数器,每个线程都会根据信号量的激活/停用而增加/减少。当信号量达到 0 时,它将锁定自己和导致它的线程。有关信号量的更多信息,请查看 wikipedia page

如果您需要更具体的建议,那么我建议您向我们提供有关您所针对的操作系统和/或您正在使用的 API 的信息,因为与线程(互斥锁、信号量等)有关的任何事情都是特定于操作系统的

关于c++ - 调试多线程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9288365/

相关文章:

java - Java 服务器中每个游戏室的线程?

c++ - 如何将地址转换为函数指针以调用方法

c++ - 模板类中的模板可变参数函数无法编译

c++ - 当人们想在函数中操作指针时,为什么要传入一个双指针呢?

c++ - 如何避免辅助函数被警告? "xxx defined but not used"

iphone - 是否可以使用 ANSI C/C++ 或嵌入式 C 开发实体层以在 Android 和 iPhone 平台中使用?

c - 如何让一个 pthread 向另一个 pthread 发出信号,表明它可以继续执行?

c - C中的多线程

c++ - 如何实现不溢出的原子引用计数器?

c++ - 运算符重载在 Visual Studio 2013 中编译但不是 gcc