创建两个具有抢占和优先级的任务

标签 c linux multithreading

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

`#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),您可以简单地定义线程的优先级,并让系统在较高优先级线程启动时自动挂起低优先级线程。引用的页面显示了如何创建具有给定优先级(最低优先级最高优先级)的线程:

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

关于创建两个具有抢占和优先级的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849739/

相关文章:

c++ - O3是固定的优化序列吗?如何更改 LLVM IR 中的帧指针值?

c - 从 CSV 文件加载数据时出现段错误

c - 在链表中插入节点的问题

在c中将十六进制转换为ASCII

linux - 网络设置

python - 在Python中创建假进程

Python 多线程,用于消息传递和避免处理器占用的队列

linux - 如何在 Oracle Linux Server 6.8 上更改没有名称的时区?

c++ - 多个线程调用 exit() 时的安全静态析构函数

java - java中的程序性能随线程变化而波动