gpt4 book ai didi

c - pthread_spin_trylock 在多线程应用程序的 sigsegv 处理程序中是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:25 24 4
gpt4 key购买 nike

我正在尝试实现一个处理程序,它在 SIGSEGV 上收集一些信息,例如进程 ID、线程 ID 和回溯,并将这些信息写入文件/管道/套接字。

问题在于,如果一个线程遇到 SIGSEGV,那么其他线程很快就会跟进的可能性(可能非常高)。如果两个线程恰好到达他们同时写报告的代码位,那么他们将交错写入(到同一个文件)。

我知道我应该只使用 signal(7) 中详述的异步信号安全函数我也见过至少两个案例here和视频链接在最佳答案 here其他人使用 pthread_spin_trylock 来解决这个问题。

这是防止上述问题的安全方法吗?

最佳答案

在大多数系统上,pthread_spin_trylock 将使用原子比较和交换(CAS 指令,它至少在 x86 上是中断安全的(不能代表其他人))来实现。

我可能会自己使用 CAS 来确保发生这种情况。这是它的 gcc 文档: http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html

和示例代码:

 static int lock = 0; // global scope

在你的信号处理程序中:

 if (__sync_bool_compare_and_swap(&lock, 0, 1)) {
// Got the lock
} else
pthread_exit(); // terminate this thread

关于c - pthread_spin_trylock 在多线程应用程序的 sigsegv 处理程序中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com