UNIX线程共用一个变量,出现core dump

zshtiger2414 2009-11-19 05:26:58
在UNIX系统下,创建多线程,做了两个测试程序。
这两个测试程序中都用到线程访问全局变量,但是有一个程序core dump了,一个程序没有core dump,这是为什么啊?
请问哪个达人能帮忙啊?
...全文
121 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Caballeroo 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zshtiger2414 的回复:]
引用 6 楼 caballeroo 的回复:
core dump 是代码segmentation fault时记录内存中数据的文件。

一般需要使用ulimit -c size,才会在代码异常时产生一个core文件。

你的代码应该有内存的非法写入等操作!


正象你说的那样子在程序中几个现成对对stderr进行了写入操作的时候出现了core dump!
这样的错误应该怎么样去避免啊?


[/Quote]

这种错误要是避免的话,完全靠平时写代码的注意点了!
zshtiger2414 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 caballeroo 的回复:]
core dump 是代码segmentation fault时记录内存中数据的文件。

一般需要使用ulimit -c size,才会在代码异常时产生一个core文件。

你的代码应该有内存的非法写入等操作!
[/Quote]

正象你说的那样子在程序中几个现成对对stderr进行了写入操作的时候出现了core dump!
这样的错误应该怎么样去避免啊?
一 铭 2009-11-21
  • 打赏
  • 举报
回复
这怎么说的准哦, 代码贴上来才知道
morris88 2009-11-21
  • 打赏
  • 举报
回复
把代码贴上来瞧瞧...
Caballeroo 2009-11-21
  • 打赏
  • 举报
回复
core dump 是代码segmentation fault时记录内存中数据的文件。

一般需要使用ulimit -c size,才会在代码异常时产生一个core文件。

你的代码应该有内存的非法写入等操作!
wuyu637 2009-11-19
  • 打赏
  • 举报
回复
如果两个线程都同时往里写,是会有问题的。
你可以先申明一个和那个全局变量一样,只有名字有差异的副本,让其中一个线程,访问副本,另外一个线程访问原来的变量,如果程序不会奔溃,就说明是同步的问题。

或者就直接点用简单的同步方法,mutex_lock之类的,防止这种情况
zshtiger2414 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
应该是其它的原因。
仅仅因为两个线程访问同一个变量不至于core dump,线程之间共享的东西还多着呢。
[/Quote]

我看了一下程序,真的就是因为程序用fprintf向stderr写东西的时候,因为系统内部调用pthread_mutex_lock函数出错了。

是不是因为这种加锁就可以使得在向某个变量写的时候,就会出现错误啊?
Wenxy1 2009-11-19
  • 打赏
  • 举报
回复
用gdb调试下。
晨星 2009-11-19
  • 打赏
  • 举报
回复
应该是其它的原因。
仅仅因为两个线程访问同一个变量不至于core dump,线程之间共享的东西还多着呢。

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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