如何允许某些线程优先锁定互斥锁使用PTHREADS
假设以下代码由10个线程执行。
pthread_mutex_lock(&lock)
Some trivial code
pthread_mutex_unlock(&lock)
为了解释的目的,我们可以说线程是T1,T2,T3 ...... T10。
我的要求是只要T1或T2或T3(即T1,T2或T3中的任何一个)等待获取锁定,其他线程T4,T5,T6 ...... T10应该无法获取锁定即T1,T2和T3应优先获取相对于其他线程的锁定。
我想这可以通过增加线程T1,T2和T3的优先级来完成
这里是伪代码
if this thread is T1 or T2 or T3
increase its priority
pthread_mutex_lock(&lock)
Some trivial code
pthread_mutex_unlock(&lock)
if this thread is T1 or T2 or T3 decrease it priority to normal
请注意,我想要一个适用于Linux平台的解决方案,并且应该使用pthreads。我真的不关心任何其他平台。
还要注意我真的不想让这3个线程成为实时,我希望它们展示它们的defualt行为(调度和优先级),除了在上面提到的一小段代码中我希望它们始终具有获取锁定的优先权。
我已经阅读了一些关于在Linux中调度策略和调度优先级的手册,但实际上并不能解决:(
这会有用吗?你能帮助我完成上述任务所需的确切pthread API吗?
问候
拉利
没有找到相关结果
已邀请:
6 个回复
盛梯獭八搽
拈吉勉犬姆
和
锁定和解锁,高优先级线程使用
和
。 设计非常简单。高优先级线程保持在临界区互斥
,低优先级线程保持在条件变量。条件变量互斥锁仅保留在共享变量的更新和条件变量的信令周围。
青董据零
表示此挂起将一直睡眠,直到所有3个插槽都可用并将全部消耗掉
犀寺扦
香腔弥胯瓤
推理: 一些线程将竞争两个锁,因此将具有较低的优先级,并且一些线程将仅竞争一个锁,因此将具有更高的优先级。 差异可能是微不足道的,然后解决方案是在获得第一次锁定和为较高优先级线程尝试第二次锁定之间引入一些延迟,在这种情况下,较高优先级的线程将有机会获得lock2。 (免责声明:谈到这个时我是新手) 编辑: 另一种尝试/方法
EDIT2:另一种尝试(试图在这里学习一些东西)
填盖
该代码还处理来自ѭ14的虚假唤醒,但坦率地说,我从未见过这种情况。 EDIT1。注意,上面的
是优先级队列的原始形式。