多くの子プロセスをフォークし、それぞれに優先度とコアを割り当てました。プロセス A は 3 秒間隔で実行され、プロセス B は 6 秒間隔で実行されます。優先度の高いプロセスが事前定義された時点でのみ優先度の低いプロセスをプリエンプトし、セマフォでそれを達成しようとするような方法でそれらを実行してほしい。両方で異なる配列値を持つ 2 つのプロセス内で、この同じコード スニペットを使用しました。
'bubblesort_desc()' は、配列を降順にソートして出力します。'bubblesort_asc()' は昇順でソートして出力します。
while(a<3)
{
printf("time in sort1.c: %d %ld\n", (int)request.tv_sec, (long int)request.tv_nsec);
int array[SIZE] = {5, 1, 6 ,7 ,9};
semaphore_wait(global_sem);
bubblesort_desc(array, SIZE);
semaphore_post(global_sem);
semaphore_wait(global_sem);
bubblesort_asc(array, SIZE);
semaphore_post(global_sem);
semaphore_wait(global_sem);
a++;
request.tv_sec = request.tv_sec + 6;
request.tv_nsec = request.tv_nsec; //if i add 1ms here like an offset to the lower priority one, it works.
semaphore_post(global_sem);
semaphore_close(global_sem); //close the semaphore file
//sleep for the rest of the time after the process finishes execution until the period of 6
clk = clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &request, NULL);
if (clk != 0 && clk != EINTR)
printf("ERROR: clock_nanosleep\n");
}
2 つのプロセスが同時にアクティブになるたびに、このような出力が得られます。たとえば、時間単位 6、12、..
time in sort1.c: 10207 316296689
time now in sort.c: 10207 316296689
9
99
7
100
131
200
256
6
256
200
5
131
100
99
1
1
5
6
7
9
ソートされたリストの 1 つのセットが印刷されている間、1 つのプロセスが他のプロセスを先取りすることは想定されていません。しかし、セマフォがないかのように機能しています。このリンクに従ってセマフォを定義しました: http://linux.die.net/man/3/pthread_mutexattr_init
その理由は何ですか?セマフォよりも優れた代替手段はありますか?