如何处理信号处理程序中的 pthread 互斥保护列表
How to deal with pthread mutex protected list in signal handler
我有一个受 pthread 互斥体保护的双向链表。如何从信号处理程序正确访问此列表? (这里,信号处理程序是生产者,其他一些代码(线程)是消费者。)
1.) 我不需要 mutex_lock 列表,因为信号处理程序是整个程序中唯一可以在信号处理期间访问列表的部分。
2.) 但是如果信号处理程序例如在列表中添加一些内容,并且在发出信号时其他线程之一当前正在访问链接列表?
在这种情况下,我认为当信号处理程序 returns 时代码可能会崩溃(因为信号处理程序中的列表修改,当前访问列表的线程未检测到)。
知道如何处理这种情况吗?
你不知道。
您应该让信号处理程序可以告诉其中一个线程它收到了信号。然后该线程(在 信号处理程序之外)可以访问该列表。
或者,使用 signalfd
并且根本没有信号处理程序。
我有一个受 pthread 互斥体保护的双向链表。如何从信号处理程序正确访问此列表? (这里,信号处理程序是生产者,其他一些代码(线程)是消费者。)
1.) 我不需要 mutex_lock 列表,因为信号处理程序是整个程序中唯一可以在信号处理期间访问列表的部分。
2.) 但是如果信号处理程序例如在列表中添加一些内容,并且在发出信号时其他线程之一当前正在访问链接列表? 在这种情况下,我认为当信号处理程序 returns 时代码可能会崩溃(因为信号处理程序中的列表修改,当前访问列表的线程未检测到)。
知道如何处理这种情况吗?
你不知道。
您应该让信号处理程序可以告诉其中一个线程它收到了信号。然后该线程(在 信号处理程序之外)可以访问该列表。
或者,使用 signalfd
并且根本没有信号处理程序。