2016-10-04 30 views
-1

簡單來說,我需要兩個任務,其中一個任務具有高優先級,另一個任務具有高優先級,另一個任務是低任務。高度優先。任務正在執行中,低優先級任務應該停止,並且在完成高優先級任務後,低優先級任務應該從之前的狀態恢復。 所以需要幫助.. 這是我使用的例子。創建兩個任務搶佔和優先

`#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

被另一個線程等待線程是不是很MULTY線程。 – tofro

+0

@tofro:好的。不是多線程,但我如何實現我的目標。? –

回答

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個消息)