目录
一.GUI线程和工作线程
每个程序在启动时都有一个线程,这个线程被称为“主线程”(在Qt应用程序中也称为“GUI线程”)。Qt GUI必须在主线程中运行。所有widgets和一些相关的类,例如QPixmap,都不能在辅助线程中工作。辅助线程通常被称为“工作线程”,因为它用于减轻主线程的工作负担。
二.同时访问数据
每个线程都有自己的堆栈,这意味着每个线程都拥有自己的调用历史和本地变量。与进程不同,线程共享相同的地址空间。下图显示了线程的构建块在内存中的位置。非活动线程的程序计数器和寄存器通常保存在内核空间中。每个线程都有一个共享的代码副本和一个单独的堆栈。
如果两个线程具有指向同一对象的指针,则两个线程可能同时访问该对象,这可能会破坏对象的完整性。很容易想象,当同时执行同一对象的两个方法时,会出现很多问题。
有时需要从不同的线程访问一个对象;例如,当在不同线程中的对象需要通信时。由于线程使用相同的地址空间,因此线程交换数据比进程更容易、更快。数据不必序列化和复制。传递指针是可行的,但必须严格协调哪个线程访问哪个对象。必须防止对一个对象同时执行操作。实现这一点有几种方法,其中一些方法如下所述。
那么,如何保证