假定下面的代码正在由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个线程成为实时线程,我希望它们表现出它们的默认行为(调度和优先级),除了在上面提到的一小段代码中,我希望它们在获取锁定时始终具有优先级。
我已经阅读了一些有关Linux中的调度策略和调度优先级的手册页,但实际上并不能弄清楚:(
这样行吗?您能为我提供完成上述任务所需的确切pthread API吗?
关于礼来
据我了解,真正保证这一点的唯一方法是编写一个自己可以运行的锁。但是,如果使用@
xryl669的答案
建议使用线程优先级和优先级继承,则肯定值得考虑。
要自己实现它,您将需要条件变量和等待的低/高优先级线程数的计数。
就所需的概念和API而言,它与实现读/写锁相对类似(但显然,所需的语义是完全不同的-但是,如果您了解了r /
w锁的工作原理,则可以将了解如何实现您想要的东西)。
您可以在此处看到读写锁的实现:
http://ptgmedia.pearsoncmg.com/images/0201633922/sourcecode/rwlock.c
在较低优先级的线程中,您需要等待高优先级的线程完成,就像读者等待编写器完成一样。
(以上代码的书摘自这本书,也是很棒的posix线程书,网址为http://www.informit.com/store/product.aspx?isbn=0201633922)
问题内容: 帮助客户解决他们遇到的问题。我更多地是sysadmin / DBA的人,所以我在努力帮助他们。他们说这是内核/环境中的错误,在我坚持要在他们的代码中或寻求供应商对OS的支持之前,我试图证明或证明这一点。 发生在Red Hat和Oracle Enterprise Linux 5.7(和5.8)上,应用程序用C ++编写 他们遇到的问题是主线程启动一个单独的线程来执行可能长时间运行的TCP
问题内容: 是多线程/进程编程的新手。所以这是我需要澄清的。 处理代码 使用上述伪代码,如果互斥锁未解锁,进程B是否可以访问? 如何从进程B正确访问sharedResource? 有没有清晰的可视化图表说明互斥体,线程和进程之间的关系? 问题答案: 您需要做的是调用pthread_mutex_lock来保护互斥锁,如下所示: 一旦执行此操作,在您在该线程中进行调用之前,不会再进行任何其他调用。因此
我想为strerror\u r调用创建线程本地缓冲区,并编写自己的线程安全字符*my\u strerror(int),它将使用线程本地缓冲区并调用strerror\r。 当阅读R. Stevens在Unix环境高级编程中关于pthread_getspecific()的例子时,我觉得差异-为什么在下面的例子中使用互斥锁? 书中的例子:
本文向大家介绍Python Threading 线程/互斥锁/死锁/GIL锁,包括了Python Threading 线程/互斥锁/死锁/GIL锁的使用技巧和注意事项,需要的朋友参考一下 导入线程包 import threading 准备函数线程,传参数 t1 = threading.Thread(target=func,args=(args,)) 类继承线程,创建线程对象 线程共享全面变量,但在
类型 pthread_mutex_t 互斥锁基本操作 函数 描述 [[pthread_mutex_init pthread_mutex_init]] 初始化互斥锁 [[pthread_mutex_lock pthread_mutex_lock]] 阻塞申请互斥锁 [[pthread_mutex_unlock pthread_mutex_unlock]] 释放互斥锁 [[pthread_mutex_
我需要构建一个具有优先级的“不公平信号量”。例如:当优先级为1的线程想要获取信号量时,它只需等待具有相同优先级的另一个线程完成,然后就可以获取()。但是,当优先级为2的线程想要获取信号量时,它必须等待优先级为1的所有线程完成后才能使用信号量,然后尝试获取()。我总共有4个不同的优先事项。这是我尝试过的,但没有成功。 有人有什么解决办法吗?