c++ 如何给 “运行中“ 的线程传递数据;
发布日期:2021-05-08 09:38:26 浏览次数:12 分类:精选文章

本文共 365 字,大约阅读时间需要 1 分钟。

1:场景是有一个线程池,我需要将任务队列中发生读写事件的fd拿出来传递到线程池

正常情况下创建线程时可以指定参数,比如这样

std::thread t(func,arg1,arg2,...)

但是我的fd是在线程已经创建好之后传入,那该怎么办?

 

线程之间传递数据并不需要什么特殊的手段,因为线程的大部分数据都是共享的,全局变量、静态全局变量和通过指针传递的数据都是可以直接在线程之间共享的。

所以最简单的方法就是定义一个全局的队列,这样每个线程都可以访问到这个队列,主线程把fd写入队列,线程池中的线程都从这个队列中取数据就可以了。当然你也可以把队列的引用通过参数传给每一个线程。
考虑到这个C++标准库的queue不是线程安全的,你可能需要用锁来保证队列的线程安全.

 

Windows下可以考虑PostThreadMessage

上一篇:TCP 协议如何解决粘包、半包问题
下一篇:strtok(), strtok_s() 字符串分割函数

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月08日 10时07分49秒