multithreading - futex 工具返回了意外的错误代码?

标签 multithreading linux-kernel pthreads futex

使用共享内存中存储的 rwlock 对象的同一进程中的两个线程在 pthreads 压力测试期间遇到崩溃。我花了一段时间试图找到内存损坏或死锁,但到目前为止一无所获。这只是通知我我造成了僵局的一种不太理想的方式吗?有关调试此工具/方法的任何指示?

线程 5“tms_test”收到信号 SIGABRT,中止。
[切换到线程 0x7ffff28a7700 (LWP 3777)]
0x00007ffff761e428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54 ../sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录。
(gdb) bt
#0 0x00007ffff761e428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff762002a 在 __GI_abort () at abort.c:89
#2 0x00007ffff76607ea in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7ffff77776cc "%s") at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff766080e in __GI__libc_fatal (message=message@entry=0x7ffff79c4ae0“futex 工具返回了一个意外的错误代码。”) at ../sysdeps/posix/libc_fatal.c:185
#4 0x00007ffff79be7e5 in futex_fatal_error () at ../sysdeps/nptl/futex-internal.h:200
#5 futex_wait (private=, expected=, futex_word=0x7ffff7f670d9) at ../sysdeps/unix/sysv/linux/futex-internal.h:77
#6 futex_wait_simple (private=, expected=, futex_word=0x7ffff7f670d9) at ../sysdeps/nptl/futex-internal.h:135
#7 __pthread_rwlock_wrlock_slow (rwlock=0x7ffff7f670cd) 在 pthread_rwlock_wrlock.c:67
#8 0x00000000004046e3 in _memstat (offset=0x7fffdc0b11a5, func=0x0, lineno=0, size=134, flag=1 '\001') at tms_mem.c:107
#9 0x000000000040703b 在 TmsMemReallocExec (in=0x7fffdc0abb81, size=211, func=0x43f858 "_malloc_thread", lineno=478) at tms_mem.c:390
#10 0x000000000042a008 in _malloc_thread (arg=0x644c11) at tms_test.c:478
#11 0x000000000041a1d6 in _threadStarter (arg=0x644c51) at tms_mem.c:2384
#12 0x00007ffff79b96ba 在 pthread_create.c:333 处的 start_thread (arg=0x7ffff28a7700) 中
#13 0x00007ffff76ef82d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
(gdb)

最佳答案

调试没有很好记录的东西是非常困难的。我试图找到有关“futex 工具返回意外错误代码”的任何有用信息,但似乎未在 futex 文档中指定。
就我而言,此消息是由 sem_wait(sem) 生成的, 其中 sem 无效 sem_t指针。在用 sem_init(sem,1,1) 初始化 sem 后,我不小心用一些随机整数覆盖了它(sem 指向的内存)。 .
尝试检查您是否将有效指针传递给锁定函数。

关于multithreading - futex 工具返回了意外的错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43036891/

相关文章:

c++ - 是否可以鼓励线程排队而不强制它?

c - 信号量无法正常工作

linux - 是否可以写入在同一个 PCIe 插槽上使用不同 PCIe channel 的多个设备?

linux - syscall_table_32.S 未找到

linux - 在 Linux 中控制信号量队列中的出队顺序

c++ - 如何在旧版 C++ 上创建自己的线程池?

ios - 在后台绘图

c++ - 线程中的内存范围共享 : ensure data is not stuck in cache

Linux 64 位上下文切换

c - 在多线程环境中遵循指针