cv_wait() 和 cv_timedwait() 函数

如果使用 cv_wait(9F) 根据某个条件将线程阻塞,但该条件不发生,则该线程将永远等待。要避免这种情况,请使用 cv_timedwait(9F),它取决于执行唤醒的其他线程。cv_timedwait() 采取绝对等待时间作为参数。如果时间已到但未发生事件,则 cv_timedwait() 将返回 -1。如果满足条件,则 cv_timedwait() 将返回一个正值。

cv_timedwait(9F) 要求自上次重新引导系统以来的绝对等待时间(以时钟周期表示)。通过使用 ddi_get_lbolt(9F) 检索当前值可确定该等待时间。驱动程序通常具有的是最大等待秒数或微秒数,因此需要使用 drv_usectohz(9F) 将该值转换为时钟周期,然后与 ddi_get_lbolt(9F) 的值相加。

以下示例说明如何使用 cv_timedwait(9F) 最多等待五秒钟便访问设备,然后向调用方返回 EIO。示例 3-2使用 cv_timedwait()clock_t cur_ticks, to;

mutex_enter(&xsp->mu);

while (xsp->busy) {

cur_ticks = ddi_get_lbolt();

to = cur_ticks + drv_usectohz(5000000); /* 5 seconds from now */

if (cv_timedwait(&xsp->cv, &xsp->mu, to) == -1) {

/*

* The timeout time 'to' was reached without the

* condition being signaled.

*/

/* tidy up and exit */

mutex_exit(&xsp->mu);

return (EIO);

}

}

xsp->busy = 1;

mutex_exit(&xsp->mu);

虽然设备驱动程序写入器通常首选使用 cv_timedwait(9F) 而不是 cv_wait(9F),但是有时选用 cv_wait(9F) 会更好。例如,如果驱动程序基于以下条件等待,则使用 cv_wait(9F) 更合适:内部驱动程序状态发生变化,在此情况下状态变化可能要求执行一些命令或设置要经过的时间

驱动程序的某些部分必须单线程执行

已在管理可能超时的情况,如 "A" 取决于 "B",同时 "B" 使用 cv_timedwait(9F)

oracle的cv函数,cv_wait 和 cv_timedwait 函数相关推荐

  1. oracle的高级分组函数,group by 高级函数使用

    在使用group by常用的基本函数包括min,max,avg,sum,count等,除了基本函数oracle中提供了一些高级分组函数, Rollup,Cube,Grouping,Grouping s ...

  2. oracle中的NVL,NVL2,NULLIF,COALESCE函数使用

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  3. Oracle从零开始04——SQL语句03——单行函数

    5.单行函数 function_name(column|expression,[arg1,arg2,-]) 参数说明:function_name:函数名称 column:数据库列名 expressio ...

  4. oracle函数大全-字符串处理函数

    2019独角兽企业重金招聘Python工程师标准>>> 这些函数全都接收的是字符族类型的参数(CHR 除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型 ...

  5. oracle字符串使用函数,oracle函数大全-字符串处理函数

    字符函数--返回字符值 这些函数全都接收的是字符族类型的参数(CHR 除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据库类 ...

  6. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  7. oracle stdevp函数,ORACLE 系统函数与SQLSERVER系统函数的区别是什么

    ORACLE 系统函数与SQLSERVER系统函数的区别是什么 发布时间:2021-03-17 14:40:36 来源:亿速云 阅读:57 作者:Leah 栏目:数据库 这篇文章给大家介绍ORACLE ...

  8. Oracle提取中文字符串拼音首字母函数

    通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母. 创建函数 /* 获取拼音简码函数 */ CREATE OR REPLACE FUNCTION GET_PY ...

  9. MySQL里和trunc函数相同的_mysql 函数中与Oracle中ltrim函数功能相同的函数是什么函数?...

    一.ANSI字符函数 字符函数用于在SQL里以不同于存储方式的格式来表示字符串. 串接就是把两个单独的字符串组合为一个. 子串的概念就是从字符串里提取一部分. TRANSLATE函数用于逐字符地把一个 ...

最新文章

  1. 使用 TFDConnection 的 pooled 连接池
  2. nf_conntrack: table full, dropping packet 解决方案
  3. 计算机反面的考研专业,2018计算机考研:历年准考证打印常见七大问题
  4. WORD2007中无法插入CMG文件
  5. Swift学习字符串、数组、字典
  6. 06_jQuery_内容过滤
  7. SQL中DATEADD和DATEDIFF的用法
  8. 8.霍夫变换:线条——动手编码、霍夫演示_4
  9. 基于表征(Representation)的文本匹配、信息检索、向量召回的方法总结
  10. 电脑护眼设置_99%的人一直坚持着错误的护眼方式!
  11. 15款优雅的 WordPress 电子商务网站主题
  12. (好文章搬个砖)MySQL索引背后的数据结构及算法原理
  13. Unity 使用ParticleSystem.Simulate让粒子播放不受时间缩放影响和ParticleSystem.Simulate详解
  14. 3行代码实现单片机AD采样功能
  15. MultipartFile transferTo() FileNotFound 拒绝访问
  16. “工欲善其事,必先利其器”-- 教你几招如何选择合适的数据可视化工具
  17. ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
  18. NUMERIC和DECIMAL区别
  19. 浏览器配置存在问题。。360断网急救箱未能修复
  20. 中国苹果树苗市场产量需求与投资收益预测报告2022-2028年

热门文章

  1. python网络编程:UDP方式传输数据
  2. 新海诚没有参与制作的作品_新海诚作品不出真人版,其实都是因为这!
  3. php ajax 点击后刷新当前页面,ajax请求值后返回会刷新页面?
  4. ubuntu 16.04 更换国内源(下载源)(阿里源)(换源)
  5. 用Python对数学函数进行求值、求偏导
  6. php代码在线快速生成,PHPGEN在线代码生成器
  7. php画中画,画中画功能 怎么将两个视频叠加播放,制作成画中画效果
  8. MAT分析器查看jvm dump文件
  9. centos7安装Metricbeat7.6.0采集nginx指标
  10. wegame饥荒一直连接中_腾讯WeGame注册用户超3亿 国产游戏销量超500万