求解一个信号量的问题

TTzen 2017-12-19 03:54:20
工作中遇到这么一种情况,用一个线程池处理网站报上来的数据,网站报上的数据有一个收集线程放到一个队列里边,用一个信号量限定了队列中数据的数量,一个信号量限定线程池中空闲线程的数量,然后这个线程池在队列中领到任务由另一个线程进行同意管理,在这个线程中调用了sem_getvalue函数来检测两个信号量,当线程池中有空闲线程并且任务队列中有任务时才去激活一个线程,现在出现了这样一个问题,如果在那个任务管理线程中不停的用while循环去调用sem_getvalue检测条件,会造成CPU时间浪费,若果加一个sleep就不能保证时效性
...全文
724 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
常书 2018-01-31
  • 打赏
  • 举报
回复
线程空闲时sem_signal一个信号量,有消息进队列时也是signal信号量,然后while中再去wait信号量就可以了
Wenxy1 2018-01-31
  • 打赏
  • 举报
回复
建设楼主先去学习操作系统的理论,PV操作原语。
looklzg1105 2018-01-30
  • 打赏
  • 举报
回复
先wait 到信号量,再get_value
金秋枣香 2018-01-23
  • 打赏
  • 举报
回复
楼主用的不是信号机制,信号机制是不需要等待的。应该是当任务队列,收到任务后,发送信号,通知线程池,线程池判断是否有空线程,如果有 切换线程进行处理。
heronism 2018-01-22
  • 打赏
  • 举报
回复
信号量等机制就是为了解决“忙等待”的问题的
zhxianbin 2017-12-19
  • 打赏
  • 举报
回复
while(1)
{
    sem_wait(任务);
    sem_wait(空闲);
    ... ... 
}
这样可以吗

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧