[1000分]谁给个Linux下可用的 pthread_suspend/resume 来, 不想到libgc里慢慢去找了

mLee79 2013-09-14 03:30:05
这300分是给顶帖子的人的. 谁给个可以用的我单独开帖子给分, 要可用分也可以...

无聊的管理内存啥的把人弄烦了,开始准备用libgc的, 后来看了看发现不是很适合嵌入式环境, 打算还是自己写个GC的库算了, 搞的也基本差不多了, 单线程的在 WIN32/WIN64/Linux/X64 Linux/ARM Linux/Android下测试都没有问题...

多线程的因为 WIN下有现成的 Suspend/ResumeThread, 跑起来也没有问题了, 就是在 Linux/Android 下遇到了点麻烦, 现在我往线程发 SIGUSR2, 在 signal handle 里 pthread_mutex_lock/pthread_cond_wait 等待resume的事件, 这个会有一定的概率(1/1000左右, 基本都出现在线程开始启动/结束的时候, 我在线程开始结束时加上sleep会大大降低出错的概率, 基本上 sleep 200ms 就基本不会出错了, 但这看起来不是个好办法)线程没有被挂起, 因为 mutex_lock/cond_wait/sem_wait 这些函数都不是 signal safe 的, 用 sem_wait 也偶尔会deadlock ..

看来要去libgc里慢慢抄了...


...全文
509 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2013-09-27
  • 打赏
  • 举报
回复
引用 12 楼 s_include 的回复:
能懂楼主 讲 什么了。。。 不过还是经验不够,想不到用途
写了用途啊, 做GC啊, GC的时候必须让全世界都暂停, 这时候就会ANR.
引用 13 楼 modyaj 的回复:
看来楼主还得自己找 睡觉
已经写好了, WIN32/WIN64/Linux/Linux X64/Android 下都跑了差不多一天多的单元测试, 应该没有问题了 ...
modyaj 2013-09-27
  • 打赏
  • 举报
回复
引用 14 楼 mLee79 的回复:
[quote=引用 12 楼 s_include 的回复:] 能懂楼主 讲 什么了。。。 不过还是经验不够,想不到用途
写了用途啊, 做GC啊, GC的时候必须让全世界都暂停, 这时候就会ANR.
引用 13 楼 modyaj 的回复:
看来楼主还得自己找 睡觉
已经写好了, WIN32/WIN64/Linux/Linux X64/Android 下都跑了差不多一天多的单元测试, 应该没有问题了 ... [/quote]
modyaj 2013-09-26
  • 打赏
  • 举报
回复
看来楼主还得自己找 睡觉
manxiSafe 2013-09-26
  • 打赏
  • 举报
回复
能懂楼主 讲 什么了。。。 不过还是经验不够,想不到用途
manxiSafe 2013-09-26
  • 打赏
  • 举报
回复
貌似很厉害额
max_min_ 2013-09-19
  • 打赏
  • 举报
回复
modyaj 2013-09-19
  • 打赏
  • 举报
回复
mLee79 2013-09-19
  • 打赏
  • 举报
回复
差不多好了, 看了看 libgc 的代码, 正确的做法是在 signal handle 里用 sem_post, sigsuspend , 这几个函数是 signal safe 的, 再放几天结贴 ...
__GUNS_N_ROSES__ 2013-09-14
  • 打赏
  • 举报
回复
大眼瞪小眼。
  • 打赏
  • 举报
回复
凑个热闹..
max_min_ 2013-09-14
  • 打赏
  • 举报
回复
绑顶, 表示也是被动接收消息,再开启对应的服务线程啦!
taodm 2013-09-14
  • 打赏
  • 举报
回复
友情帮顶。
只用纯消息驱动来使用线程的人飘过。
大尾巴猫 2013-09-14
  • 打赏
  • 举报
回复
友情帮顶 字数.cpp
肩抗轨道炮 2013-09-14
  • 打赏
  • 举报
回复

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧