gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:37:26 26 4
gpt4 key购买 nike

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com