C/C++多线程编程
文章平均质量分 72
介绍高性能的生产可用的C++标准库的多线程性能优化方案。
白行峰 (花名)
关注系统界面开发技术,安全,语言特性,网络,图形,AI,硬件,并发,研发流程管理.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[C/C++线程安全]_[中级]_[使用future来获取异步调用返回值和解决回调地狱问题]
场景在异步编程时, 往往需要传入函数A作为接收异步调用的输出。 因为当异步逻辑得到数据时,就会调用函数A,我们称函数A为回调函数。在回调函数A里写的逻辑被调用时,如果需要以此结果作为另一个异步调用的参数,那么通常的做法就是在回调函数A里调用异步逻辑,传入回调函数B。以此类推,如果回调函数里不得不调用另一个回调函数,那么就会出现我们常说的回调地狱(Callback Hell). 如何解决?说明在C++11之后可以通过传入lambda表达式来代替普通函数指针,function类对象,因此也可以代替回原创 2021-03-06 10:03:12 · 1369 阅读 · 0 评论 -
[C/C++线程安全]_[中级]_[避免使用的C线程不安全函数]
# 场景1. 在开发`C/C++`时,多线程执行任务算是很常见的了。但是`C98`还遗留了一些`C`函数并不支持多线程调用,如果调用会出现未定义行为。那么这些函数是哪些?有什么替代方法吗?原创 2025-08-10 11:22:01 · 282 阅读 · 0 评论 -
[C/C++线程安全]_[中级]_[实现Java的synchronized方式的对象锁2.0]
1. 在前面的文章说过《C++实现synchronized方式的对象锁》可以实现`Java`的`synchronized`易用特性。这个第一版的例子并没有说明如何删除`pthread_mutex_t`对象,随着加锁的对象增加会出现内存泄漏的情况,怎么解决?原创 2024-01-05 23:35:19 · 780 阅读 · 0 评论 -
[C/C++线程安全]_[中级]_[多线程条件变量wait_for方法的使用]
1. 在开发多线程程序时,有时候需要启动一个线程来监听外部进程的执行情况,并且在指定时间如果还没运行结束就强制结束外部线程。那么`C++`标准库有这种监听线程并能在超时时提示的方法吗?原创 2025-01-11 17:54:43 · 489 阅读 · 0 评论 -
[C/C++线程安全]_[中级]_[如何取消线程和停止线程]
场景在开发多线程程序时,经常由于需要重新执行任务从而取消(停止)工作线程。C++11目前并没有很好的取消线程执行的机制。那么我们应该如何实现取消线程呢?说明C++11使用<future>库进行线程间数据通讯,也可以利用它来进行控制线程停止。但是没有pthread那么强大,pthread有取消点函数,线程执行到取消点函数就会判断如何线程状态设置为取消,那么就会调用预先设定的线程清理函数清理资源,而取消点之后的代码块不会执行。而C++11并没有取消点的设计。只有在工作线程里判断某个值如原创 2020-07-19 17:19:34 · 4529 阅读 · 0 评论 -
[C/C++线程安全]_[中级]_[多线程访问修改集合vector会冲突的两个解决方案]
1. 在开发`C/C++`多线程程序时,`STL`集合类是我们经常用到的类,比如`vector`. 而`C/C++`的这些集合类并没有同步版本,所以在多线程访问时,如果某个线程正在修改集合类`A`, 而其他线程正在访问`A`,那么会造成数据冲突,导致程序抛出异常。这里说的访问`A`,意思是调用`A`的任何方法。难道我们需要在用到`A`的地方对`A`进行加锁? 麻烦不止,而且很容易造成性能下降。原创 2020-06-21 15:13:15 · 3650 阅读 · 0 评论 -
[C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
1. 在`C/C++`多线程程序里,经常会用到对共享变量进行读写,最容易想到的是加上锁进行读写。假设当有多个线程对共享变量进行读操作时,该业务逻辑的耗时需要至少`2s`来进行处理,那么当一个读线程进行锁定时,其他读线程只能等待`2s`才会被唤醒。因为读共享变量是线程安全的,有没有方法在读的时候不需要排他锁占用?原创 2025-08-09 17:28:40 · 334 阅读 · 0 评论
分享