【问题标题】:create two task with preemption and priority创建两个具有抢占和优先级的任务
【发布时间】:2016-10-04 10:17:03
【问题描述】:

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

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

`

【问题讨论】:

标签: c linux multithreading


【解决方案1】:

如果你有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 条消息)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2021-07-19
    • 2013-06-01
    • 2021-02-25
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多