当前位置:  技术问答>linux和unix

alarm的响应线程是谁?

    来源: 互联网  发布时间:2016-04-15

    本文导语:  我现在想做1个定时器,定时器回调函数里,要访问1个队列。这个队列在程序其他代码里也要访问。 我使用alarm做定时,但是不知道该队列是否需要进行互斥。 alarm到时间时,回调函数到底是由哪个线程调用的?我写...

我现在想做1个定时器,定时器回调函数里,要访问1个队列。这个队列在程序其他代码里也要访问。
我使用alarm做定时,但是不知道该队列是否需要进行互斥。
alarm到时间时,回调函数到底是由哪个线程调用的?我写了代码进行测试,结果如下:

Thread Id is :18561
Thread Id is :18561
Error!
Begin.
1111111111111111111111111111111111111111111100000000000000000000
End.

测试代码在最后,大体是先设好alarm在2秒后调Func,主程序里不断往buf[64]数组里交替写全0和全1,Func里输出当前线程ID,和buf内容
我就奇怪了,为啥相应回调函数的线程就是主线程呢,而且此时主线程显然正在忙碌运行中,是被OS强行“打断”的。
如果真是这样的话,我要在Func里访问队列,主线程里也要访问队列,那么,给队列加上互斥操作,起作用吗?这里明明是1个线程啊,不知道互斥操作还是否管用。
百思不得其解,忘高人指点~


#include 
#include 
#include 
#include 
#include 

#define gettid() syscall(__NR_gettid)
#define LENGTH 64
int buf[LENGTH];

void Func(int sig)
{
pid_t threadId = gettid();
printf("Thread Id is :%dn", (int)threadId);
int item = buf[0];
int i;
for(i = 0;i 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • larm 时间已经过期(alarm<jiffies)是什么意思?
  • alarm() 和 signal()的问题
  • 请教一个alarm(0)的问题
  • 简易定时闹铃工具 Alarm Clock
  • 用alarm和pause来实现sleep:分不够可在加
  • 这个程序为什么 alarm 不起作用?
  • Alarm定时小问题
  • c/c++开源软件 iis7站长之家
  • alarm() signal()的问题??
  • 需要几分钟或半个小时或一个小时执行,定时用alarm还是sleep好?
  • aupe中关于alarm的困惑
  • socket tcp 关于 alarm() 和 recv() ?
  • 如何用alarm实现每隔一段时间显示不同的内容?
  • alarm中关闭了socketfd,但是recvfrom无法知道
  • 请问为什么alarm失去作用?
  • 关于Linux下alarm信号的问题
  • alarm发闹铃信号,但只会执行一次.
  • alarm的问题
  • 为什么msgrcv和 ALARM不能共同调用?急在线等。。。
  • 关于 signal alarm pause


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3