当前位置: 技术问答>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个线程啊,不知道互斥操作还是否管用。
百思不得其解,忘高人指点~
我使用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