C 接收信号时线程通信

C 接收信号时线程通信,c,multithreading,pthreads,signals,C,Multithreading,Pthreads,Signals,我已经从我的主线程中产生了多个线程。所有这些线程都有相同的启动例程。此例程包含该例程的本地计数器。我想定期打印这个计数器。我如何做到这一点 我知道我们可以使用条件变量在不同线程之间进行通信。但我不想阻塞任何线程,让它们等待特定的信号,简言之,计数器必须不断更新 总而言之,这就是我想要实现的目标: 多个线程正在运行,并不断更新自己的计数器 SIGALRM已注册,它会定期通知这些线程中的每个线程打印它们的计数器 只需使用全局变量作为处理程序中更新的SIGALRM计数器,然后在例程中,检查全局计数器值

我已经从我的主线程中产生了多个线程。所有这些线程都有相同的启动例程。此例程包含该例程的本地计数器。我想定期打印这个计数器。我如何做到这一点

我知道我们可以使用条件变量在不同线程之间进行通信。但我不想阻塞任何线程,让它们等待特定的信号,简言之,计数器必须不断更新

总而言之,这就是我想要实现的目标:

  • 多个线程正在运行,并不断更新自己的计数器

  • SIGALRM已注册,它会定期通知这些线程中的每个线程打印它们的计数器


  • 只需使用全局变量作为处理程序中更新的SIGALRM计数器,然后在例程中,检查全局计数器值是否已更改,打印本地计数器并将全局计数器值保存到本地变量

    只需使用全局变量作为处理程序中更新的SIGALRM计数器,然后在例程中,检查全局计数器值是否更改,打印局部计数器并将全局计数器的值保存到局部变量

    您计划如何从信号处理程序内部访问函数的局部变量?我真的不明白为什么线程局部变量与多线程相关?也许如果你能给我们一个MCVE()会更容易理解是的。这是我没有得到的。我假设信号处理程序必须向这个函数传递某种消息。在例程中添加一个参数,告诉它在参数存在时只打印计数器。从信号处理程序中,使用此参数调用例程以打印本地计数器。我不认为这里有任何关于多线程或竞争条件的问题。信号处理程序只能访问全局/静态数据,因此需要分配一个全局变量(类型为sig_atomic__t)在处理程序中,并在辅助例程中进行检查。您计划如何从信号处理程序内部访问函数的局部变量?我真的不明白为什么线程局部变量与多线程相关?也许如果你能给我们一个MCVE()会更容易理解是的。这是我没有得到的。我假设信号处理程序必须向这个函数传递某种消息。在例程中添加一个参数,告诉它在参数存在时只打印计数器。从信号处理程序中,使用此参数调用例程以打印本地计数器。我认为这里没有任何关于多线程或争用条件的问题。信号处理程序只能访问全局/静态数据,因此您需要在处理程序中分配一个全局变量(类型为sig_atomic__t),并在工作例程中检查它。