Linux线程优先级的问题 10C

我在linux中创建了两个线程Task0和Task1,并且修改了线程的优先级,工作方式为SCHED_FIFO,但是不知道为什么执行起来并没有显示抢占的现象,反而感觉像是时间片轮的方式执行的,两个线程交替执行。并且两个线程执行总是从后创建的那个线程开始执行,想不明白是什么原因。希望有了解大神能给予指导,谢谢!!!![![![图片说明](https://img-ask.csdn.net/upload/201608/16/1471326018_568716.jpg)图片说明](https://img-ask.csdn.net/upload/201608/16/1471326009_342485.png)图片说明](https://img-ask.csdn.net/upload/201608/16/1471325997_886332.png)图片说明

3个回答

图片说明

这个优先级,OS并不一定会遵守,Linux也是抢占式操作系统,所以线程可能都会有机会运行

要固定在同一个cpu上运行, 才能达到期望的效果。请搜索CPU_SET

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Linux线程优先级
1. Linux线程优先级范围 Linux定义线程优先级范围在头文件 /* * Priority of a process goes from 0..MAX_PRIO-1, valid RT * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH * tasks are in the range MAX_RT_PR
linux线程优先级
创建线程的顺序OTHER    RR-LOW-PRI    FIFO-LOW-PRI      RR-HIGH-PRI      FIFO-High-PRI RR-LOW-PRI    可以抢占  OTHER FIFO-LOW-PRI  可以抢占  RR-LOW-PRIRR-HIGH-PRI   可以抢占  FIFO-LOW-PRIFIFO-High-PRI  可以抢占  RR-HIGH-PRI ...
Linux编程-线程优先级的设定
      By:Ailson Jack       Date:2016.04.04       个人博客:www.only2fire.com       本文在我博客的地址是:http://www.only2fire.com/archives/60.html,排版更好,便于学习。       最近在学习Linux的编程,这里在博客中记录一下学习的过程。       对于线程的优先级设定...
线程优先级问题.....
我用CreateThread创建10个线程.从数据库提取数据,修改状态再写入数据库.rn每个线程处理1000条.它们之间的时间片相关太大.rn比如10个线程有8个都完成了.还有2个线程才处理200条.不知什么原因.rn线程的优先级我也设置了rn SuspendThread(hThread[i]);rn SetThreadPriority(hThread[i],15);rn ResumeThread(hThread[i]);rn----------------------------------------------rn一直找不到原因.怎么样才能设计它们都有相同的时间片呢?
线程优先级问题!
小生正在做一个实时采集系统的上位机,需要用到多线程技术,目前分了4个线程:主线程、串口监视线程、绘制图形线程和数据存储线程,但有点不知道优先级怎么安排,我暂时的考虑是串口监视线程最高,主线程其次,然后是绘制图形线程,数据存储线程最低。不知道这么安排是否合理,如果可以如何保证低优先级的线程也能获得CPU时间呢
线程优先级的问题
线程的优先级高的情况下,会首先得到cpu的时间,当自己的时间片运行完毕后,操作系统会查看是否还有另一个线程的优先级也是高的,如果是高的,那就执行高的,这样低级的优先级就没有机会可以执行,称为“饥饿”。但是双核的cpu可以避免,可以高的和低的优先级线程同时执行。rnrn1.是不是如果有两个优先级为32(最高)的线程,单核处理器,其他线程基本没有执行的机会了就?rnrn2.或者是一个优先级为32的线程,单核处理器,那么是不是这个线程会反复执行,意思就是:当这个线程的时间片到了,他会挂机,其他低的优先级线程执行,但是一旦这个高的线程准备好了,就算这个低的线程时间片没结束,也会被打断,所以如果有一个高级优先级的话,其他的线程得到执行的机会就会很少。除非在高优先级线程中sleep挂起,给其他线程才有机会,这样理解对吗?rnrn如果是双核处理器呢,还请大牛回答下。rnrn
线程优先级问题
下列代码中,两个线程处于不同优先级,为何输出结果还是交替打印?rnrn#include rn#include rnrnDWORD WINAPI ThreadIdle(LPVOID lpParam);rnDWORD WINAPI ThreadNormal(LPVOID lpParam);rnrnint main(int argc, char* argv[])rnrn DWORD dwThreadID;rn HANDLE h[2];rn rn // 创建一个优先级为Idle的线程rn h[0] = ::CreateThread(NULL, NULL, ThreadIdle, NULL,rn CREATE_SUSPENDED, &dwThreadID);rn ::SetThreadPriority(h[0], THREAD_PRIORITY_IDLE);rn ::ResumeThread(h[0]);rnrn // 创建一个优先级为Normal的线程rn h[1] = ::CreateThread(NULL, NULL, ThreadNormal, NULL,rn 0, &dwThreadID);rn rn // 等待两个线程内核对象都变成受信状态rn ::WaitForMultipleObjects(rn 2, // DWORD nCount 要等待的内核对象的数量rn h, // CONST HANDLE *lpHandles 句柄数组rn TRUE, // BOOL bWaitAll 指定是否等待所有内核对象变成受信状态rn INFINITE); // DWORD dwMilliseconds 要等待的时间rn rn ::CloseHandle(h[0]);rn ::CloseHandle(h[1]);rnrn return 0;rnrnrnDWORD WINAPI ThreadIdle(LPVOID lpParam)rnrn int i = 0;rn while(i++<10)rn printf("Idle Thread is running \n");rnrn return 0;rnrnrnDWORD WINAPI ThreadNormal(LPVOID lpParam)rnrn int i = 0;rn while(i++<10)rn printf(" Normal Thread is running \n");rnrn return 0;rnrnrnVS2008专业版编译输出如下:rnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrnIdle Thread is runningrn Normal Thread is runningrn请按任意键继续. . .
线程优先级问题?
[code=Java]rnpublic class Priorty rnrn static class MyThread extends Threadrn private int ID=0;rn public MyThread(int id)rn this.ID=id;rn rn public void run()rn System.out.println("MyThread-"+this.ID+" begin! Priorty: "+this.getPriority());rn System.out.println("MyThread-"+this.ID+" end");rn rn rn public static void main(String []args)rn MyThread[] myThreads=new MyThread[3];rn for(int i=0;i<3;i++)rn myThreads[i]=new MyThread(i+1);rn myThreads[i].setPriority(i*3+1);rn rn for(int i=0;i<3;i++)rn myThreads[i].start();rn rn rnrnrn[/code]rnrn启动3个线程,分别将优先级设为1,4,7.目的是先调用按优先级的高低输出,但是虚拟机的输出结果是随机的,请问用什么方法,能按规定优先级的高低调用?rn[code=Java]rn//运行结果:rnMyThread-2 begin! Priorty: 4rnMyThread-3 begin! Priorty: 7rnMyThread-1 begin! Priorty: 1rnMyThread-2 endrnMyThread-3 endrnMyThread-1 endrn//--------------rnMyThread-1 begin! Priorty: 1rnMyThread-2 begin! Priorty: 4rnMyThread-1 endrnMyThread-3 begin! Priorty: 7rnMyThread-3 endrnMyThread-2 endrn//--------------rnMyThread-1 begin! Priorty: 1rnMyThread-1 endrnMyThread-3 begin! Priorty: 7rnMyThread-3 endrnMyThread-2 begin! Priorty: 4rnMyThread-2 endrn//--------------rnMyThread-3 begin! Priorty: 7rnMyThread-3 endrnMyThread-2 begin! Priorty: 4rnMyThread-2 endrnMyThread-1 begin! Priorty: 1rnMyThread-1 endrn[/code]rnrnrnrn
线程优先级
线程优先级的设置
线程优先级|java线程优先级
* <p>Title: 提高线程优先级</p> * <p>Description: 通过修改线程的优先级,是线程获得优先处理。</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Filename: upPRIThread.java</p> * @author * @version 1.0
请教关于线程优先级的问题!
最近刚写了个多线程,用一个Timer重复创建两个线程,并且每个线程有大量运算,在halfdream(哈欠)和zhang21cnboy(沧桑男人)指导下,断定Timer的重复创建应该没有问题,创建时用如下语句:rn Thread1.create(false);rn Thread2.create(false);rn但发现如下情况:当两个线程都创建玩了,Thread1所得到的CPU时间明显数倍于Thread2,不知什么原因,不知是不是线程优先级的问题。我尝试在创建线程后把两个线程的Priority属性打印出来比较(用showmessage显示,已转换成string),但不成功,请各位高手指教,谢谢。
请教多线程的问题:线程优先级
描述:rn一个C/S程序,在本地存有一个SQLLITE数据库。用户操作时,首先将数据写入SQLLITE。(Insert)rn另外启动了一个线程,它负责将本地的数据和服务器数据进行同步。rn现在的问题是:在C/s程序中保存时,可能正碰到线程处理数据,需要等待线程执行完毕。从界面看起来保存数据会有延迟。rn我想用线程的优先级来处理,例如:rnthread.Priority = ThreadPriority.Lowest;rn不知道这样处理时,会不会导致其它问题,例如:线程还没执行完毕,将本地一行数据的状态已经置为UPdate状态,但数据库操作还没完成 。rn请教高手指点.在线等。。。rnrn
关于线程优先级的问题~~
最近刚研究线程,有点问题想请教,就是在windows中,创建了2个优先级不同的线程,为什么还是会相间调度呢?不是优先级高的线程先执行完再调用优先级低的吗?测试代码如下:rn[code=C/C++]DWORD WINAPI ThreadRun( LPVOID lpParameter )rnrn int i = 0;rn while ( i != 10 )rn rn printf( "Normal Thread is running:\n" );rn ++i;rn rnrn return 0;rnrnrnDWORD WINAPI IdleThreadRun( LPVOID lpParameter )rnrn int i = 0;rn while ( i != 10 )rn rn printf( "Idle Thread is running:\n" );rn ++i;rn rnrn return 0;rnrnrnint main()rnrn HANDLE hThread[2] = 0 ;rn hThread[0] = ::CreateThread( NULL, NULL, IdleThreadRun, NULL, CREATE_SUSPENDED, NULL );rn if ( 0 == hThread[0] )rn rn cout << "CreateThread error" << endl;rn return -1;rn rn ::SetThreadPriority( hThread[0], THREAD_PRIORITY_IDLE );rnrn hThread[1] = ::CreateThread( NULL, NULL, ThreadRun, NULL, CREATE_SUSPENDED, NULL );rn if ( 0 == hThread[1] )rn rn cout << "CreateThread error" << endl;rn return -1;rn rn ::SetThreadPriority( hThread[1], THREAD_PRIORITY_NORMAL );rnrn ::ResumeThread( hThread[1] );rn ::ResumeThread( hThread[0] );rnrn ::WaitForMultipleObjects( 2, hThread, TRUE, INFINITE );rnrn getchar();rn return 0;rn[/code]
Android线程优先级问题
不管是先给textview附值还是后给,都是先执行sleep想问一下其中的原理rn[code=java]tv.setText("random----->"+Math.random()*100); rn try rn Thread.sleep(3000);rn catch (InterruptedException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn //tv.setText("11111111111");[/code]rnrn还有在不单开线程启动server时再sleep又出现按钮先弹起来然后server执行sleep然后自己结束的情况rn[code=java]Log.v("thread_ID----->", ""+Thread.currentThread().getId());rn tv.setText("random----->"+Math.random()*100);rn Intent intent =new Intent();rn intent.setAction(MyServer.MY_ACTION);rn startService(intent);rn //tv.setText("11111111111");[/code]rn[code=java]public int onStartCommand(Intent intent, int flags, int startId) rn Log.v("thread_ID2----->", ""+Thread.currentThread().getId());rn try rn Thread.sleep(8000);rn catch (InterruptedException e) rn e.printStackTrace();rn rn stopSelf();rn return super.onStartCommand(intent, flags, startId);rn rnpublic void onDestroy() rn // TODO Auto-generated method stubrn super.onDestroy();rn Log.v("ondestroy", "ondestroy");rn [/code]
Java线程优先级抢占问题
java中,使线池中的一个当前运行的线程阻塞,运行优先级高的线程,待高优先级线程运行完毕后,再运行刚才被阻塞的线程。 大家有什么好的方法么?~
线程优先级无效问题。
有如下代码,设置了 两个线程T1,T2 ,T2设置了优先,但是感觉没有作用,最后还是 T1先跑完。这是为什么?rn[code=Java]public class TestPriorityrnrn public static void main(String[] args)rn rn Thread t1 = new Thread(new T1());rn Thread t2 = new Thread(new T2());rn t2.setPriority(Thread.NORM_PRIORITY+3);rn t1.start();rn t2.start();rn rn rnrnrnrnclass T1 implements Runnablernrn public void run()rn rn for(int i=1;i<=10000;i++)rn rn System.out.println("T1:"+i);rn rn rnrnrnclass T2 implements Runnablernrn public void run()rn rn for(int i=0;i<10000;i++)rn rn System.out.println("-------------T2:"+i);rn rn rn[/code]
关于windows线程优先级的问题。
java中windows中的优先中有几个?rn看到有些资料上是这么写的0<1,2<3,4<5<6,7<8,9<10,不知道对不对?但MIN_PRIORITY在windows中的值是1,上面的分法怎么出来个0?rnwindows中优先级顺序到底是什么?
线程优先级设置问题?
我想把一个采集线程的优先级设的比存储线程高一些,因为有的时候存储线程影响采集线程!rnrn默认线程的调试是SCHED_OTHER,可它没有优先级可调!从这可以看出,都是0。rn[code=C/C++] printf("thread max:%d, min:%d\n", sched_get_priority_max(SCHED_OTHER), sched_get_priority_min(SCHED_OTHER));rn[/code]rnrn我看书中用这几个函数:rn[code=C/C++]rn pthread_attr_init()rn pthread_attr_setschedpolicy()rn pthread_attr_setschedparam()rn pthread_attr_destroy()rn[/code]rnrn它们是这样一个顺序使用吧?最后把attr这个参数传给线程建立函数吧?还是在建立好的线程里设置。rn[code=C/C++]rnpthread_attr_init(&attr);rnpthread_attr_setschedpolicy(&attr, SCHED_RR);rnpthread_attr_getschedparam(&attr, &param);rnparam.sched_priority=20;rnpthread_attr_setschedparam(&attr, &param);rnpthread_create(&tid, &attr, (void *)myfunction, myarg);rn[/code]rn我是按上面使用的,可是程序进入后好像没有设置的线程都不动了,只设置了SCHED_RR的线程在走。rnrn[color=#FF0000]哪位能详细的说一下调用顺序?rn最后再问一下pthread_setschedparam()这个函数怎么用?它和pthread_attr_getschedparam()是什么区别?先不胜感谢![/color]
问一个线程优先级的问题
为防止网络发送时乱序 一个互斥.rn 在发送前 WaitForSingleObject(h_mtxSocket,-1);rn 在接收后 ReleaseMutex(h_mtxSocket);rnrn有几个线程调用.时. rn 出现死锁.rnrn跟踪发现. 低优先级的进入发送状态. 激活WaitForSingleObjectrn 在没有接收好之前(也就是说没有ReleaseMutex)rn 如果一个高优先级的线程也是进入发送状态. 激活WaitForSingleObjectrnrn这是死锁时.跟踪线程出来的形态.rn请问这是互斥与其它的内核对象区别之一?rn是临界区就没有问题了吗?
关于linux下线程优先级问题
大家好 我写个线程优先级程序 但是运行跟期待结果有时候不对rn按道理说优先级高的抢占了优先级低的线程后直到他运行结束才释放CPU给优先级低的线程吧?rn但是有时候还是thread_fc2到最后执行完。rnrn我以为应该是高优先级的thread_fc2应该抢占了thread-fc1后马上执行完的。rnrn#include rn#include rnint i, j;rnvoid thread_fc1(void)rn for (j = 0 ;j<100;j++)rn printf("hello i am nu 1!\n");rn return;rnrnrnvoid thread_fc2(void)rnrn for(i = 0; i<100; i++)rn printf("hello i am nu 2 !\n");rn return;rnrnint main()rnrn int max, min;rn pthread_t tid1, tid2;rn struct sched_param sched_pri1, sched_pri2, sched_pri3;rn pthread_attr_t attr1;rn pthread_attr_t attr2;rn pthread_attr_init(&attr1);rn pthread_attr_init(&attr2);rnrn pthread_attr_setschedpolicy(&attr1, SCHED_FIFO);rn pthread_attr_setschedpolicy(&attr2, SCHED_FIFO);rnrn sched_pri1.__sched_priority = 10;rn sched_pri2.__sched_priority = 18;rn rn pthread_attr_setschedparam(&attr1, &sched_pri1);rn pthread_attr_setschedparam(&attr2, &sched_pri2);rnrn pthread_create(&tid1, &attr1, (void *)thread_fc1, NULL);rn pthread_create(&tid2, &attr2, (void *)thread_fc2, NULL);rnrn sleep(10);rn return 0;rn
关于设置线程优先级问题!
[code=C/C++]rn #includern #includernrn using namespace std;rnrnDWORD WINAPI Threadpro(LPVOID lp);rnDWORD dwThreadId[2];rnrn void main() rn rn HANDLE hthread1;rn HANDLE hthread2;rn rn //创建两个线程,每个线程给予的标志都是挂起的。rn hthread1=::CreateThread(NULL,NULL,Threadpro,NULL,CREATE_SUSPENDED ,&dwThreadId[0]);rn cout<<"创建的第一个线程ID:"<
请教线程优先级问题
我写了一个基于对话框的程序,在初始化时启用了一个线程,然后做了个运算的测试,不过运行以后 当鼠标在对话框中有动作(移动等)时我写的那个线程便会停止,是不是我的没有设置优先级的原因,我用的是AfxBigenThread(DD,this);rn求各位大大帮帮忙,应该如何完成线程才能做得好些不容易出错,还有线程挂起的问题rn我最终是要用在AD采集程序个用的 我想的是在线程里做个精度高的定时。。rn膜拜膜拜!!!!
线程优先级问题,求帮助
创建了两线程,优先级一个为最高,一个为最低,为什么运行结果是有的是两线程交叉运行,有的是一个先运行完再运行另一个,这和windows程序设计第2版(王艳平)里面说windows是不允许优先级相对低的线程占用CPU的不符合,求解释。rn而且有时程序会运行出错,这又是为什么?rnrn运行截图rn[img=https://img-bbs.csdn.net/upload/201306/05/1370402419_918708.gif][/img]rn// 03PriorityDemo.cpp : Defines the entry point for the console application.rn//rn[img=https://img-bbs.csdn.net/upload/201306/05/1370402732_728623.gif][/img]rnrnrn代码如下rn#include "stdafx.h"rn#includernDWORD WINAPI ThreadIdle(LPVOID lpParam)rnrn int i=0;rn while(i++<10)rn printf("Idle Thread is running \n");rn return 0;rnrnDWORD WINAPI ThreadNormal(LPVOID lpParam)rnrn int i=0;rn while(i++<10)rn printf("Highest Thread is running \n");rn return 0;rnrnint main(int argc, char* argv[])rnrn DWORD dwThreadID;rn HANDLE h[2];rnrn h[0]=::CreateThread(NULL,0,ThreadIdle,NULL,CREATE_SUSPENDED,&dwThreadID);rn ::SetThreadPriority(h[0],THREAD_PRIORITY_IDLE);//新创建线程优先级为THREAD_PRIORITY_IDLErnrn h[1]=::CreateThread(NULL,0,ThreadNormal,NULL,CREATE_SUSPENDED,&dwThreadID); rn ::SetThreadPriority(h[1],THREAD_PRIORITY_HIGHEST);//新创建线程优先级为THREAD_PRIORITY_HIGHESTrnrn ::ResumeThread(h[0]);//使线程开始运行rn ::ResumeThread(h[1]);//使线程开始运行rnrn ::WaitForMultipleObjects(rn 2,rn h,rn TRUE,rn INFINITE);rnrn ::CloseHandle(h[0]);rn ::CloseHandle(h[1]);rn return 0;rnrn
dshow转换线程优先级的问题?
我架好了一个视频转换的链路,运行也都OK。rnrn由于程序需要,我把其都封装在了一个线程里面跑,用下面的方式创建之rnrnm_pDShowThread = AfxBeginThread(DShowThreadProc,&m_dshowThreadInfo,THREAD_PRIORITY_IDLE,0,CREATE_SUSPENDED,NULL);rnrn已经设置为IDLE优先级,不过对这个线程似乎没有作用,是因为dshow有一部分是在ring 0里面跑的原因吗?上层于是控制不住?rnrn陆老师以及各位dx请支招,如何能控制其cpu占用率呢?rn
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池