Qt5.9如何实现简单的多线程

这就是陷阱:直接调用terminate()强行终止线程会导致资源没有被释放。

不信:不要依赖自动销毁来清理线程资源。

不要这样做:在线程中使用易失性变量来安全地终止线程,而不是直接调用terminate()。

C++多线程秘籍:3行代码实现并发,性能提升10倍

嘿哥们,我最近迷上了C++多线程编程。
这很有趣,但也很无聊。
我记得在2 01 8 年做的一个图像处理项目中曾经使用多线程来加速处理,但结果却充满了陷阱。
我确实遇到了很多陷阱。

首先,您需要了解多线程的基本概念。
就像今年,当我深入研究图像处理时,我发现多线程实际上可以增加计算密集型任务。
但问题是保证任务可以并行,线程不能一直想着同步数据。
你必须学会​​分工并一起工作,不要让线程互相争斗。

然后我尝试使用三行代码来实现并行性。
那时非常简单:只需创建一个线程,让它执行任务,最后等待线程完成后再继续。
例如:
cpp 包含 包含<线程>
无效任务(int id){ std::cout << "线程" << id>int main() { std::线程 t1 (任务, 1 ); std::线程 t2 (任务, 2 ); t1 .join(); t2 .join(); 返回0;
关键是创建线程时传递函数和参数。
然后join()方法确保主线程等待子线程完成以防止资源泄漏。

但说实话,提高多线程性能并不像你想象的那么容易。
记得有一次在处理大量数据的时候,我原本以为在8 核CPU上会快8 倍。
但由于内存带宽限制等原因,效果并没有预想的那么好。

此外,处理资源争用和死锁也是一个挑战。
例如,在我之前的一个项目中,有一个计数器。
如果多个线程尝试同时递增它,则计数器值不正确。
后来我使用互斥锁解决了这个问题:
cpp include<互斥体>
std::mutex mtx;
void Sure_increment() { for(int i = 0; i < 1> 锁(mtx); ++计数器; }
至于死锁,这次我有两个线程。
一个线程持有锁 1 并等待锁 2 ,另一个线程持有锁 2 并等待锁 1 结果是死锁。
后来我学会了聪明一点,以固定的顺序获取锁或者使用 std::lock 来锁定多个互斥锁。

最后,我总结了一些最佳实践,例如比如明确任务类型、最小化共享数据、使用工具支持、性能测试等,虽然这个东西比较复杂,但是如果掌握了它,对于提高程序的性能会有很大的帮助。

总之,多线程编程存在很多陷阱,但只要掌握了技巧,就可以把它变成提高程序性能的有力工具。
兄弟,你也要多练习,慢慢来,不要着急。