関数の実行を時間制限するプログラムを開発しようとしています。以下のコードにInc
は、多くの反復を行う (無限ループによってシミュレートされた) という名前の関数があります。各反復の最初の部分は非常に長く、その後に非常に高速な 2 番目の部分が続きます。
コードの最初の部分で実行を横取りしてもかまいませんが、2 番目の部分で書き込み操作を行っているときにアラームが鳴るのを避けたいと思います。
私の最初のアイデアは、「安全な地域」に入る前にアラームをオフにして、残り時間を節約することでした。退出後、保存した時間でアラームを設定します。これを実装する方法がわかりません。誰かが私を助けることができますか?別の方法も歓迎します。
#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");
}