我使用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 Reciver(IPAddress mcastGroup, int mcastPort, IPAddress ipSource)
{
thread = new Thread(ReceiveData);
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.ReceiveBuf
假设下面的代码由10个线程执行。
pthread_mutex_lock(&lock)
Some trivial code
pthread_mutex_unlock(&lock)
为了解释的目的,让我们假设线程是T1、T2、T3.....T10。我的要求是,只要T1或T2或T3(即任何T1、T2或T3)正在等待获取锁,其他线程i.t T4、T5、T6.....T10就不应该能够获得锁,例如T1、T2和T3在获取锁时应优先考虑其他线程。
我想这可以通过增加线程( T1、T2和T3 )的优先级来实现。
这是伪代码
if this thread is T1 or T2 or T3
in
因此,我不会让您对原因感到厌烦,但是我的应用程序可以使用CRC对非常大的文件(高达50 to )执行一些完整性检查。因为我不想杀死用户的机器,如果它们打开了这个选项,所以我在句柄上设置了IoPriorityHintVeryLow提示,并且使用将线程优先级设置为THREAD_MODE_BACKGROUND_BEGIN。
代码的耗时部分如下所示:
//
// Read one block of the changed data at a time, checking each CRC
//
DWORD blockNum = 0;
vector<BYTE> changeBuffer(DI