2016-10-04 126 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个消息)