int OSA_semCreate(OSA_SemHndl *hndl, Uint32 maxCount, Uint32 initVal)
{
pthread_mutexattr_t mutex_attr;
pthread_condattr_t cond_attr;
int status=OSA_SOK;

status |= pthread_mutexattr_init(&mutex_attr);
status |= pthread_condattr_init(&cond_attr);

status |= pthread_mutex_init(&hndl->lock, &mutex_attr);
status |= pthread_cond_init(&hndl->cond, &cond_attr);

hndl->count = initVal;
hndl->maxCount = maxCount;

if(hndl->maxCount==0)
hndl->maxCount=1;

if(hndl->count>hndl->maxCount)
hndl->count = hndl->maxCount;

if(status!=OSA_SOK)
OSA_ERROR("OSA_semCreate() = %d \r\n", status);

pthread_condattr_destroy(&cond_attr);
pthread_mutexattr_destroy(&mutex_attr);

return status;
}

int OSA_semWait(OSA_SemHndl *hndl, Uint32 timeout)
{
int status = OSA_EFAIL;

pthread_mutex_lock(&hndl->lock);

while(1) {
if(hndl->count > 0) {
hndl->count--;
status = OSA_SOK;
break;
} else {
if(timeout==OSA_TIMEOUT_NONE)
break;

pthread_cond_wait(&hndl->cond, &hndl->lock);
}
}

pthread_mutex_unlock(&hndl->lock);

return status;
}

int OSA_semSignal(OSA_SemHndl *hndl)
{
int status = OSA_SOK;

pthread_mutex_lock(&hndl->lock);

if(hndl->count<hndl->maxCount) {
hndl->count++;
status |= pthread_cond_signal(&hndl->cond);
}

pthread_mutex_unlock(&hndl->lock);

return status;
}

int OSA_semDelete(OSA_SemHndl *hndl)
{
pthread_cond_destroy(&hndl->cond);
pthread_mutex_destroy(&hndl->lock);

return OSA_SOK;
}

void OSA_waitMsecs(Uint32 msecs)
{
#if 1
struct timespec delayTime, elaspedTime;

delayTime.tv_sec = msecs/1000;
delayTime.tv_nsec = (msecs%1000)*1000000;

nanosleep(&delayTime, &elaspedTime);
#else
usleep(msecs*1000);
#endif
}

http://www.cnblogs.com/mywolrd/archive/2009/02/05/1930707.html#ConVarOverview

http://blog.csdn.net/npuweiwei/article/details/8661829

dm8148 开发之---互斥量、条件量、枷锁、互斥枷锁的更多相关文章

  1. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  2. 【C】——信号量 互斥锁 条件变量的区别

    信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里).而互斥锁是用在多线程多任务互斥的,一个线程占用了某 ...

  3. C++11 多线程同步 互斥锁 条件变量

    在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...

  4. 【Java Web开发学习】Spring4条件化的bean

    [Java Web开发学习]Spring4条件化的bean 转载:https://www.cnblogs.com/yangchongxing/p/9071960.html Spring4引入了@Con ...

  5. redis实现点击量/浏览量

    java+redis实现高性能新闻点击量更新 1.redis简单介绍.它用来做高性能数据存取 是极好的. 2.实例:新闻点击量. 1)每次刷新,我们并不一定要往数据库里面立即更新数据 2)可以在red ...

  6. Swift开发第七篇——字面量转换&下标

    本篇分为两部分: 一.Swift 中的字面量转换 二.Swift 中的下标 一.Swift 中的字面量转换 所谓字面量就是指像特定的数字,字符串或者是布尔值这样能够直接了当地指出自己的类型并未变量进行 ...

  7. dm8148 开发只boot启动参数vram=128简介

    显存 全称显示内存,即显示卡专用内存.显存对于显卡就好比内存对于整台电脑,地位非常重要,它负责存储显示芯片需要处理的各种数据.显存容量的大小.性能的高低,直接影响着电脑的显示效果.目前,工作站显卡常用 ...

  8. 【String注解驱动开发】如何按照条件向Spring容器中注册bean?这次我懂了!!

    写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不 ...

  9. 学习WEb前端开发的需要哪些条件

    第一阶段--HTML的学习. 超文本标记语言(HyperText Mark-up Language 简称HTML)是一个网页的骨架,无论是静态网页还是动态网页,最终返回到浏览器端的都是HTML代码,浏 ...

随机推荐

  1. 页面自动适应大小&&获取页面的大小

    直接上代码: <script type="text/JavaScript"> var size = 1.0; function showheight() { alert ...

  2. javascript快速入门23--XHR—XMLHttpRequest对象

    创建XMLHttpRequest对象 与之前众多DOM操作一样,创建XHR对象也具有兼容性问题:IE6及之前的版本使用ActiveXObject,IE7之后及其它浏览器使用XMLHttpRequest ...

  3. 判断浏览器是否支持 JS

    在有些浏览器中不支持(或者被禁用了)脚本语言,那么javascript脚本则无法被执行.但是用户并不知道浏览器是否支持,或者被禁用.我们可以通过<noscript>标签来告知用户,JS脚运 ...

  4. struts2设置文件上传大小

    利用struts2想要设置或者限制上传文件的大小,可以在struts.xml配置文件里面进行如下配置: <constant name="struts.multipart.maxSize ...

  5. HAWQ技术解析(十八) —— 问题排查

    (原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-incubating/troubleshooting/Troubleshoo ...

  6. Laravel 5系列教程二:路由,视图,控制器工作流程

    免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel ...

  7. ubuntu vim markdown 实时预览

    vim-instant-markdown插件 该插件支持vim编辑markdown文件时实时预览,不需要手动做任何事情! 使用vim打开一个xxx.md文件,浏览器会自动打开一个预览网页,在编辑这个文 ...

  8. JavaScript完整性检查

    1.7个“坑” <!DOCTYPE html> <html lang="zh"> <head> <meta charset="U ...

  9. .Net之路(十五)图解LoadRunner压力測试

    在项目编码阶段结束后,就须要进行软件測试. 成为软件开发过程中一个不可缺少的环节.而自己主动化測试也是将逐步取代人工繁杂的測试.压力測试就是软件測试对软件性能评估的一个方面,以下就简介我在使用load ...

  10. Qt学习 之 多线程程序设计

    QT通过三种形式提供了对线程的支持.它们各自是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为easy,并能充分利用多处理器机器的优势. ...