当我使用Solaris的prstat来获取线程的状态时,我得到了以下结果。我不能理解的一件事是,每个线程的te与我通过pthread_create创建这些线程的配置完全不同。我将sme线程的优先级设置为10,但这里的PRI显示的优先级与此完全不同。谁能帮我回答我的问题。prstat命令的优先级与pthread_create的参数是否有匹配关系?
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID
5874 mals 355M 313M run 32 0 20
当我记录下面的两个线程I时,它们是不同的。
long threadId = Thread.currentThread().getId();
long threadId2 = android.os.Process.myTid();
但在Android文档中,它们是完全相同的:
/**
* Returns the Thread of the caller, that is, the current Thread.
*/
public static native Thread currentThread();
所以我假设第一行将返回调用者线程的id。
然后是这个
/**
* Returns
我使用pthread_create()在我的Linux应用程序中创建了一个线程。我想让这个线程以非常低的优先级运行,因为在同一个应用程序中有一些实时线程在运行。下面是线程函数本身中的代码:
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
/* Trying to set lowest priority possible for this thread */
我很难理解setscheduler函数中的sched_priority角色。
我使用的是linux 2.4.X,文档中写道:
Valid priorities for SCHED_OTHER is 0, Valid priorities for SCHED_RR\FIFO are 1...MAX_USER_RT_PRIO-1
但是,我记得rt进程的优先级是0-99,SCHED_OTHER的优先级是100-139,所以...我错过了什么?struct sched_param中的sched_priority指的是什么?
我正在读一本关于多线程程序的书,我发现了一个小例子:
public static class Program
{
public static void ThreadMethod()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(“ThreadProc: {0}”, i);
Thread.Sleep(0);
}
}
public