请教xtang,如何保持某个线程的高优先级?

例如有个i2c驱动的程序优先级是30。rtc程序需要操作i2c设置和读取时钟。默认优先级为10的rtc运行后,i2c的驱动也跟着降下来。
当然,通过提高rtc的优先级,可以使i2c的驱动得到提高。
请问还有没有其它办法,使i2c的驱动一直保持需要的高优先级?

建立线程之前应该可以用pthread_attr_setinheritsched()设置PTHREAD_EXPLICIT_SCHED来实现。但是如果线程已经建立,如何再设置PTHREAD_EXPLICIT_SCHED?

好像可以设置,不用扮演客户的优先级进行操作的,下面摘自Getting Started with QNX Neutrino: A Guide for Realtime Programmers中的Message Passing一节:
You can turn off priority inheritance if you don’t want it; see the _NTO_CHF_FIXED_PRIORITY flag in the ChannelCreate() function’s documentation

感谢回复。LS的方法也无法使用。我现在试atmel的9263的i2c驱动。有关线程、channel建立等内容都在libi2c-master.a的库里,没有源代码没法修改。

问题其实是这样的。

i2c在收到优先级为10的请求后,会在优先级10上进行服务,这是为了防止优先级反转。

当它在优先级10上服务结束后,一般它会回到阻塞状态(Receive)。在pidin输出里可以看到优先级是10。不过,优先级是只对执行态(RUNNING)、准备态(READY)才有意义的,阻塞状态时的优先级是没有意义的。 在我们的例子来说,下一次i2c退出阻塞状态时,它的优先级会再调整到向它发消息的线程的优先级。

所以i2c驱动,只在向它提请求的客户端的优先级上运行。

基本上所有的QNX服务器都在这个模式下运行。否则很容易造成优先级反转。

谢谢大侠出手。
现在明白了。应该根据应用的需要,在应用程序中指定先级。