虽然一直使用VC,但很久之前有使用过Qt写过一些小工具,但没有完整看过Qt一些相关书籍,最近看书发现《C++ GUI Qt4编程》(第14章)多线程互斥量使用好像有问题。
《C++ GUI Qt4编程》(第14章)14.2 这一节将QMutex定义在了 Thread 类下,编译调试书本中的例子,发现使用QMutex Lock()方法会报错:
The inferior stopped because it received a signal from the Operating System.
Signal name: SIGSEGV
Signal meaning: Segmentation fault
以上错误,我个人觉得此报错:很可能跟指针有关,指向不确定的内存并且试图访问。譬如使用野指针、空指针等。
但结合此处,我个人认为,如果是定义到 Thread 类下,对线程A/ 线程B下根本没有任何意义。因为线程A和线程B都会重新创建一个属于自己的互斥量对象,这对线程A和线程B根本起不到互斥的作用。
正确的做法应该是把互相量定义为相对子线程的“全局变量”才能真正起到互斥的作用,经验证这样可以起到真正互斥的效果。