创建两个具有抢占和优先级的任务 [英] create two task with preemption and priority

查看:65
本文介绍了创建两个具有抢占和优先级的任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

简单来说,我需要两个任务,一个任务优先级高,另一个任务低.高优先级时.任务正在执行中,低优先级任务应停止,高优先级任务完成后,低优先级任务应从先前状态恢复.所以需要帮助..这是我使用的示例.

Putting it simple, I need two task, with one task having high priority, and other is low. when high priority. task is in execution low priority task should stop and after completion of high priority task , low priority task should Resume from previous state. So need help.. This is example i used.

`#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);
}

`

推荐答案

如果您有 RTLinux(具有实时扩展的linux),您可以简单地定义线程的优先级,并让系统在高优先级线程启动时自动挂起低优先级线程.参考页面展示了如何创建具有给定优先级(最低最高)的线程:

If you have a RTLinux (linux with real time extensions), you could simply define the priorities of the threads and let the system automatically suspend a low priority thread as soon as a higher priority thread starts. The referenced page show how to create a thread with a given priority (the lowest the highest):

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 可以是:

But you should not repeatedly start new threads in a loop, but put the loop in the function. To reproduce the example, print_message_function could be:

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

(这里每个线程会打印 10 条消息)

(here it will print 10 messages per thread)

这篇关于创建两个具有抢占和优先级的任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆