我正在尝试开发一个程序来限制函数的执行。在下面的代码中,我有一个名为的函数Inc
,它进行了很多迭代(由无限循环模拟)。每次迭代的第一部分都很长,第二部分应该很快。
我不介意在代码的第一部分抢占执行,但我想避免在第二部分执行写操作时发出警报。
我的第一个想法是在进入“安全区域”之前关闭警报以节省剩余时间。然后退出后,我会用节省的时间设置闹钟。我不知道如何实现这一点。有人可以帮助我吗?也欢迎替代方法。
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
pthread_t thread;
FILE *fout;
void *Inc(void *param){
int i;
long long int x = 0;
fout = fopen("file.txt", "w");
/* Large number of iterations */
while(1){
int k = 0;
for(i=0; i<5000000; i++)
k += (rand())%3;
x += k;
printf("%lld\n", x);
/* Enter Safe Region */
fprintf(fout, "%lld\n", x);
/* Exit Safe Region */
}
}
void Finish(int param){
pthread_cancel(thread);
fclose(fout);
}
main (){
pthread_attr_t attr;
void *status;
signal(SIGALRM, Finish);
alarm(10);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&thread, &attr, Inc, NULL);
pthread_attr_destroy(&attr);
pthread_join(thread, &status);
printf("Program Finished\n");
}