C Alarm()可以用于这样的多线程处理吗?

C Alarm()可以用于这样的多线程处理吗?,c,alarm,C,Alarm,我很好奇我是否能用unistd c函数报警(int信号) 有我的主要。。。。对于创建的每个线程,hat将使用函数初始化一个SIGALRM,在激活的情况下,该函数将关闭我的线程。这可能吗?或者1 SIGALRM/main仅合法?好的,那么首先,实际使用的是一个无符号int值,它是过期前的秒数。因此,您的示例int signal不是alarm()的正确实现,仅供参考 就这一点而言: 为初始化SIGALRM而创建的每个线程 生成的SIGALRM是为进程而不是每个线程生成的,因此您必须捕获警报并制定一些

我很好奇我是否能用unistd c函数
报警(int信号)

有我的主要。。。。对于创建的每个线程,hat将使用函数初始化一个SIGALRM,在激活的情况下,该函数将关闭我的线程。这可能吗?或者1 SIGALRM/main仅合法?

好的,那么首先,实际使用的是一个无符号int值,它是过期前的秒数。因此,您的示例
int signal
不是
alarm()
的正确实现,仅供参考

就这一点而言:

为初始化SIGALRM而创建的每个线程
生成的
SIGALRM
是为进程而不是每个线程生成的,因此您必须捕获警报并制定一些内部策略,以了解您为哪个线程发出警报,并相应地进行处理。一旦有了处理程序,您可以反复发出警报,但请记住:

报警请求没有堆叠

所以你必须一次做一个。这仍然是可能的,但并不像你所希望的那样完全向前迈进

对于我所说的非常粗略的例子:

  • 您有一个“经理”,负责跟踪请求
  • 线程1告诉管理器它需要在10秒内处理一些事情
  • 管理器“记录”此信息并调用set
    报警(10)
  • 线程2告诉管理器需要在3秒内唤醒它
  • 管理器调用
    alarm(0)
    终止该警报,调用
    alarm(3)
    然后注意到,一旦警报关闭,它需要调用
    alarm(7)
    以完成线程1的睡眠时间
  • 在警报处理程序中,您只需调用管理器,让它知道警报已发出,它将唤醒相应的线程(2),然后为下一个线程重置警报
好的,首先,实际使用的是一个无符号int值,它是过期前的秒数。因此,您的示例
int signal
不是
alarm()
的正确实现,仅供参考

就这一点而言:

为初始化SIGALRM而创建的每个线程
生成的
SIGALRM
是为进程而不是每个线程生成的,因此您必须捕获警报并制定一些内部策略,以了解您为哪个线程发出警报,并相应地进行处理。一旦有了处理程序,您可以反复发出警报,但请记住:

报警请求没有堆叠

所以你必须一次做一个。这仍然是可能的,但并不像你所希望的那样完全向前迈进

对于我所说的非常粗略的例子:

  • 您有一个“经理”,负责跟踪请求
  • 线程1告诉管理器它需要在10秒内处理一些事情
  • 管理器“记录”此信息并调用set
    报警(10)
  • 线程2告诉管理器需要在3秒内唤醒它
  • 管理器调用
    alarm(0)
    终止该警报,调用
    alarm(3)
    然后注意到,一旦警报关闭,它需要调用
    alarm(7)
    以完成线程1的睡眠时间
  • 在警报处理程序中,您只需调用管理器,让它知道警报已发出,它将唤醒相应的线程(2),然后为下一个线程重置警报
进程中的每个线程都有一个独立的信号掩码 指示线程当前正在阻塞的信号集。A. 线程可以使用pthread_sigmask(3)操纵其信号掩码。在一个 传统的单线程应用程序,sigprocmask(2)可用于 操纵信号屏蔽

从人7号发来信号

问题是警报是每个进程工作的,而不是每个线程,因此如果线程的sigmask相同,您就无法真正知道哪个线程将接收信号

进程中的每个线程都有一个独立的信号掩码 指示线程当前正在阻塞的信号集。A. 线程可以使用pthread_sigmask(3)操纵其信号掩码。在一个 传统的单线程应用程序,sigprocmask(2)可用于 操纵信号屏蔽

从人7号发来信号


问题是警报是每个进程工作的,而不是每个线程,因此如果线程的sigmask相同,您就无法真正知道哪个线程将接收信号。

您所说的是哪个
alert()
?我不知道在Maybe See here中有一个“警报”:也许它没有回答你的整个问题,但它有有趣的信息。你在谈论哪个
alert()
?我不知道在Maybe See here中有一个“警报”:可能它没有回答你的整个问题,但它有有趣的信息。因此,如果一个线程在其他线程中阻止它,它将在左边的线程中接收?那么如果一个线程在其他线程中阻止它,它将在左边的线程中接收?