2016-10-04 9 views
-1

シンプルにすると、2つのタスクが必要です.1つのタスクは優先度が高く、もう1つは低いです。優先度が高いときタスクは実行中低優先度タスクが停止し、高優先度タスクが完了した後、低優先度タスクは前の状態から再開する必要があります。 助けが必要です.. これは私が使用した例です。プリエンプションと優先度を持つ2つのタスクを作成する

`#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h> 
void *print_message_function(void *ptr); 
main() 
{ 

    pthread_t thread1, thread2; 
    const char *message1 = "Thread 1"; 
    const char *message2 = "Thread 2"; 
    int th1, th2; 
    /* Create independent threads each of which will execute function */ 
    while (1) 
    { 
th1 = pthread_create(&thread1, NULL, print_message_function, (void*) message1); 
    if(th1) 
    { 
     fprintf(stderr,"Error - pthread_create() return code: %d\n",th1); 
     exit(EXIT_FAILURE); 
    } 
th2 = pthread_create(&thread2, NULL, print_message_function, (void*) message2); 

if(th2) 
    { 
     fprintf(stderr,"Error - pthread_create() return code: %d\n",th2); 
     exit(EXIT_FAILURE); 
    } 
    printf("pthread_create() for thread 1 returns: %d\n",th1); 
    printf("pthread_create() for thread 2 returns: %d\n",th2); 

} 
    /* Wait till threads are complete before main continues. Unless we */ 
    /* wait we run the risk of executing an exit which will terminate */ 
    /* the process and all threads before the threads have completed. */ 

    pthread_join(thread1, NULL); 
    pthread_join(thread2, NULL); 
    exit(EXIT_SUCCESS); 
} 
void *print_message_function(void *ptr) 
{ 
    char *message; 
    message = (char *) ptr; 
    printf("%s \n", message); 
} 

`

+1

あなたの努力は、別のスレッドで待つスレッドが非常にマルティスレッドではありません – LPs

+2

表示します。 – tofro

+0

@tofro:ok。マルチスレッドではありませんが、私はどのようにして目標を達成しますか? –

答えて

0

あなたはRTLinux(リアルタイム拡張子を持つLinux)を持っている場合は、単にスレッドの優先順位を定義し、システムが自動的に高い優先順位次第、優先度の低いスレッドを中断させことができスレッドが開始されます。

pthread_attr_t attr; 
struct sched_param param; 
pthread_attr_init(&attr); 
param.sched_priority = 1; // here priority will be 1 
pthread_attr_setschedparam(&attr, &param); 
pthread_create(&t1, &attr, &print_message_function, (void*) message1); 

しかし、あなたが繰り返しループ内で新しいスレッドを開始しますが、機能にループを置くべきではありません。どのように与えられた優先順位(最低から最高)とのスレッドを作成するために参照ページを示しています。例を再現するには、print_message_functionは次のようになります。

void print_message_function(void *ptr) { 
    char * message = ptr; 
    int i; 
    for (i=1; i<10; i++) { 
     printf("%s\n", message); 
    } 
} 

(ここでは、スレッドごとに10件のメッセージが出力されます)

関連する問題