- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在主线程中创建了两个线程ThreadA和ThreadB,并且三个线程具有相同的优先级。调用顺序是ThreadA在ThreadB前面(我看不懂)。
但是,当增加主线程优先级时,调用顺序是ThreadB在ThreadA之前(我的理解)。我从手册页收到此消息,如下所示:
调用 sched_setscheduler(2)、sched_setparam(2) 或 sched_setattr(2)
将把 pid 标识的 SCHED_FIFO(或 SCHED_RR)线程放在
列表的开头(如果它是可运行的)。结果,它可能会抢先
当前正在运行的线程(如果具有相同的优先级)。 (POSIX.1
指定线程应该转到列表的末尾。)
代码如下:
/*
* critical.c
*
* compile with gcc critical.c -o critical -lrt -lpthread
*
* result is aaaaabbbbb when three thread have same priority
* result is bbbbbaaaaa when main thread has higher priority
*/
#include <pthread.h> /* header file for pthreads */
#include <unistd.h> /* header file for POSIX conformance */
#include <time.h> /* header file for POSIX time management */
#include <sched.h> /* header file for POSIX scheduling */
#include <stdio.h> /* header file for standard input/outputlibrary */
#define _REENTRANT /* macro to ensure system calls are reentrant */
void *threadA(void *); /* predefine threadA routine */
void *threadB(void *); /* predefine threadB routine */
pthread_t threadA_id,threadB_id,main_id; /* thread identifiers */
pthread_attr_t attrA,attrB; /* thread attribute structures */
struct sched_param param; /* scheduling structure for thread attributes */
int policy=SCHED_FIFO;
int priority_min,priority_max; /* for range of priority levels */
/* main routine */
int main()
{
struct timespec start;
int status; /* check that system calls return ok */
clock_gettime(CLOCK_REALTIME, &start); /* get the time */
printf("Start time is: %d seconds %d nano_seconds\n",start.tv_sec,start.tv_nsec);
/* Set processor affinity */
unsigned long mask = 1; /* use only 1 CPU core */
unsigned int len = sizeof(mask);
status = sched_setaffinity(0, len, &mask);
if (status < 0) perror("sched_setaffinity");
status = sched_getaffinity(0, len, &mask);
if (status < 0) perror("sched_getaffinity");
/* Find priority limits */
priority_max = sched_get_priority_max(policy);
priority_min = sched_get_priority_min(policy);
/* Change priority and policy of main thread */
main_id = pthread_self();
param.sched_priority=priority_min;
status = pthread_setschedparam(main_id, policy, ¶m);
if (status != 0) perror("pthread_setschedparam"); /* error check */
/* Create threadA */
param.sched_priority = priority_min;
pthread_attr_init(&attrA);
status = pthread_attr_setschedpolicy(&attrA,policy);
if (status != 0) perror("pthread_attr_setschedpolicy"); /* error check */
status = pthread_attr_setschedparam(&attrA,¶m);
if (status != 0) perror("pthread_attr_setschedparam"); /* error check */
status = pthread_create(&threadA_id, &attrA, threadA, NULL);
if (status != 0) perror("pthread_create"); /* error check */
status = pthread_setschedparam(threadA_id,policy,¶m);
if (status != 0) perror("pthread_setschedparam");
/* Create threadB */
param.sched_priority = priority_min; /* so that B runs with a higher priority than A */
pthread_attr_init(&attrB);
status = pthread_attr_setschedpolicy(&attrB,policy);
if (status != 0) perror("pthread_attr_setschedpolicy"); /* error check */
status = pthread_attr_setschedparam(&attrB,¶m);
if (status != 0) perror("pthread_attr_setschedparam"); /* error check */
status = pthread_create(&threadB_id, &attrB, threadB, NULL);
if (status != 0) perror("pthread_create"); /* error check */
status = pthread_setschedparam(threadB_id,policy,¶m);
if (status != 0) perror("pthread_setschedparam");
/* Join threads - force main to wait for the thread to terminate */
printf("main() waiting for threads\n");
status = pthread_join(threadA_id, NULL);
if (status != 0) perror("pthread_join(threadA_id, NULL)"); /* error check */
status = pthread_join(threadB_id, NULL);
if (status != 0) perror("pthread_join(threadB_id, NULL)"); /* error check */
printf("\nmain() reporting that all threads have terminated\n");
return(0);
} /* end of main */
void *threadA(void *arg)
{
int j;
for(j=1;j<=5;j++){
printf("a");
}
return (NULL);
}
void *threadB(void *arg)
{
int j;
for(j=1;j<=5;j++){
printf("b");
}
return (NULL);
}
最佳答案
示例是创建一个优先级为 1、采用 FIFO 调度的线程:
int retVal;
pthread_attr_t attr;
struct sched_param schedParam;
pthread_t thread;
retVal = pthread_attr_init(&attr);
if (retVal)
{
fprintf(stderr, "pthread_attr_init error %d\n", retVal);
exit(1);
}
retVal = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
if (retVal)
{
fprintf(stderr, "pthread_attr_setinheritsched error %d\n", retVal);
exit(1);
}
retVal = pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
if (retVal)
{
fprintf(stderr, "pthread_attr_setschedpolicy error %d\n", retVal);
exit(1);
}
schedParam.sched_priority = 1;
retVal = pthread_attr_setschedparam(&attr, &schedParam);
if (retVal)
{
fprintf(stderr, "pthread_attr_setschedparam error %d\n", retVal);
exit(1);
}
retVal = pthread_create(&thread,
&attr,
_Thread,
NULL);
if (retVal)
{
fprintf(stderr, "pthread_create error %d\n", retVal);
exit(1);
}
如果您的实时优先级软限制过于严格。
在运行代码之前,在 shell 中调用 ulimit -r unlimited
。或者直接在代码中调用 setrlimit(RLIMIT_RTPRIO, ...)
。
系统范围的限制在/etc/security/limits.conf
中设置。
关于当线程具有相同优先级时,对 SCHED_FIFO 策略的 theads 调度感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967909/
我正在研究 Bootstrap 4 中的表格。我不知道为什么不应用台灯类中的背景颜色。这是因为台灯无法覆盖暗灯吗?如果是真的,你能告诉我是什么让 thead-dark 优先于此吗?如果不是我想的,请为
我有两种情况,使用和不使用 的 HTML 脚本显示不同。标签。 场景 1:(带有 标签) HTML PAGE
谁能告诉我 while(thead != NULL) 和 while(thead->next !=NULL) 之间的区别是什么,因为遍历列表 thead != NULL 不工作,而 thead->ne
我有以下问题:我的 table 有大头(3 行)。我想修复thead 和tbody 滚动。我用jquery 但是当我向下滚动时,边框消失了。 $(document).ready(function()
我已将以下 CSS 应用于我的表格。 thead, tbody { display: block; } tbody { height: 200px; overflo
这个问题在这里已经有了答案: How to set tbody height with overflow scroll (16 个答案) 关闭 5 年前。
我希望我的表格具有固定的 thead 和可滚动的 tbody。我对其应用了以下 CSS: thead, tbody { display: block; } tbody { height:
我想使用 Christian Bach's tableSorter client-side table sorting jQuery plugin使用我的 asp.Net GridView 控件。 但
我正在开发一个 react - rails 应用程序,但我的控制台中一直出现此错误: ``` Warning: validateDOMNesting(...): cannot appear as a
好的,长篇短篇小说。我有一个结构如下的表: longer Heading with a width of 100% cell 1cell 2 cell 3cell 4 而且我希望 th 是
我正在使用Datatables对我拥有的数据表进行排序/过滤。我希望能够在标题中对两者进行排序和过滤,但是,单击过滤器会使表排序,然后过滤器选择不会保持打开状态。 我这里有一个演示:http://co
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
是否可以使用 javascript 将第一行移动到 中?标签? Server Name Network Zone Operational
我有一些 JavaScript 可以将点击的第 th 个元素的类切换为“升序”或“降序”。 问:在 css 中,如何显示与 .ascending 或 .descending 关联的 jQuery-UI
所以我能够创建一个粘性标题表并且它工作正常。问题是我需要制作另一个带有多行标题的表格,而我目前使用的方法不起作用,正如您在下面的代码中看到的那样。 .table-wrapper { positio
几乎有了 - 用动态数据描绘一个表格 - 这可以右对齐表格中的日期和数字列但更重要的是我还想右对齐相应 中的标签列柱子。如果我了解幕后情况,下面的这个方法一次一行,如果有匹配,它适用 text-al
我有以下内容: Document Date Buy-from Vendor No.
使用 thead 而不是仅仅使用 td 有什么好处?如果有好处... 最佳答案 HTML 中的 thead、tbody 和 tfoot 元素用于根据内容将表行分组到逻辑部分。您这样做的主要原因有两个:
我有一个数组: let headers = [ { title: 'First Name', style: 'bold' }, { title: 'Last Name', style:
我目前正在尝试编写一个实现以下功能的函数: 按随机顺序从“消息”列表中获取所有消息,同时确保没有重复的消息。 在延迟 1 - 10 秒范围内的随机秒数后打印它们。 所有线程完成后,打印字符串“打印完成
我是一名优秀的程序员,十分优秀!