鱼C论坛

 找回密码
 立即注册
查看: 2357|回复: 0

Linux父线程和子线程中分别创建一个对象的问题

[复制链接]
发表于 2019-9-16 23:33:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 469826336 于 2019-9-17 19:31 编辑

这几天一直看陈硕的《linux多线程服务端编程》Eventloop类设计,其遵循one loop per thread原则,然后作者为了验证现有功能编写了两个实例,然后我就一直卡住在这了。

第一个实例是编写了s00/test1.cc,它在主线程和子线程分别创建一个Eventloop,然后程序正常运行退出。
第二个实例是编写了s00/test2.cc,它在主进程创建一个Eventlooop对象,却试图在另一个线程调用其Eventloop::loop(),程序会因断言而异常终止。

我的问题是:
1.第一个实例为什么子进程不会出错,子进程创建Eventloop对象时的t_loopInThisThread变量不应该不为空吗。然后我今天发现它创建子进程的方法是用的pthread_create,在网上搜了下发现和fork有区别,是因为这个区别导致的吗。
2.第二个实例报错是因为pthread_create出来的子进程和父进程共享全局变量g_loop的threadId_这个成员导致的吗。

如果有大佬愿意花时间解说下,小子在此感激不尽 ,下面是一些相关的源码。

Eventloop的部分实现

                               
登录/注册后可看大图


                               
登录/注册后可看大图


                               
登录/注册后可看大图


Eventloop::loop()的实现

                               
登录/注册后可看大图


test1.cc

                               
登录/注册后可看大图


                               
登录/注册后可看大图


test2.cc

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表