- 论坛徽章:
- 0
|
在主线程中开了两个线程thread1和thread2,目的是thread1执行一次就通知thread2执行一次。
其中thread1中,用signal(SIGALRM,encode)和setitimer做为定时触发器,定时执行encode()函数,在encode函数中有pthread_cond_broadcast函数来触发thread2函数的执行。
问题:当定时器为66ms一个周期的话,计算执行300次所需要的时间拿,手表加打印输出为20s,说明正常。当定时器为40ms一个周期,执行500次,理论上执行这500次应该是20s,但确花了43秒,多次测试都差不多这个数。
不知道问题会出在哪里,会不会thread1线程或者thread2线程多霸占了一些时间。
大概代码:
thread1中的encode,此函数每隔一定周期被执行一次
pthread_mutex_lock(&mutex_encode_record)
逻辑变量1 = 1;
逻辑变量2 = 0;
业务函数();
逻辑变量1 = 0;
逻辑变量2 = 1;
pthread_mutex_unlock(&mutex_encode_record);
pthread_cond_signal(&cond_enc_end);
在thread2中
while(1)
{
while(逻辑变量2 ==0 || 逻辑变量1 == 1)
pthread_cond_wait(&cond_enc_end,&mutex_encode_record);
业务函数();//此业务函数就是写文件,很小数据,时间忽略不计
逻辑变量1 == 1;
pthread_mutex_unlock(&mutex_encode_record);
} |
|