深入理解Posix线程与嵌入式网络编程
1. Posix线程优先级问题解决方案
在多线程编程中,线程优先级问题可能会导致一些复杂的情况。为了解决这些问题,有两种常见的方法:优先级继承和优先级天花板。
- 优先级继承 :当线程1等待互斥锁时,将线程2的优先级临时提升到线程1的优先级。这样,线程2不会被优先级低于线程1的任何任务抢占。
- 优先级天花板 :当线程2获得互斥锁时,将其优先级提升到一个指定的值,该值高于任何可能等待此互斥锁的任务的优先级。这种方法被认为更高效,因为它消除了不必要的上下文切换。
Posix线程提供了可选属性,可将互斥锁的协议设置为优先级继承或优先级天花板,并设置优先级天花板的值。
2. 线程间通信:条件变量
在许多情况下,一个线程需要通知另一个线程关于受互斥锁保护的共享资源的状态变化。例如,两个线程共享对一个队列的访问,线程1读取队列,线程2写入队列。
- 问题描述 :线程1锁定互斥锁后检查队列是否有数据。如果有,读取数据并解锁;如果为空,线程1需要阻塞直到线程2写入数据。但在线程1解锁互斥锁和阻塞之间存在一个间隙,此时线程2可能执行而未意识到有线程在等待队列。
- 解决方案 :条件变量通过在锁定互斥锁的情况下等待(阻塞)来解决这个问题。内部的条件等待函数会解锁互斥锁,允许线程2继续执行。当条件等待返回时,互斥锁会再次被锁定。
以下是条件变量的基本操作函数:
超级会员免费看
订阅专栏 解锁全文
558

被折叠的 条评论
为什么被折叠?



