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. linux使用其它用户 su - op -c

    su - op -c "whoami"

  2. Server 2008 R2 安装活动目录和配置DNS及故障解决

    一.安装windows2008_64bit_r2 给服务器设置密码:xxxxxxxx 二.安装配置DNS规则 1.更改服务器主机名:DCserver 2.配置静态IP地址 IP地址:10.0.100. ...

  3. 恼人的The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved...错误,无奈用Struts的bean:write替代了JSTL的C:out

    一个应用中有两个页面使用了JSTL的c:out输出,就类似这么简单三句 <c:if test="${!empty error}">       <h2>&l ...

  4. mui 跨域请求

    <ul class="mui-table-view" style="margin-top: 25px;"> <li class="m ...

  5. 挖一挖C#中那些我们不经常使用的东西之系列(1)——ToDictionary,ToLookup

    这个系列我们看看C#中有哪些我们知道.可是又不知道怎么用.又或者懒得去了解的东西,比方这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,当中ToAr ...

  6. 《让LoadRunner走下神坛》

    这几天碰到这么几件事情,觉得挺有意思的:1.        有个朋友问了我一个问题:LoadRunner的缺点在哪?然后我反问她:LoadRunner的优点在哪?她一时语塞,后来说:感觉都是优点没有什 ...

  7. Access 连接字符串全集

    连接 Access 2007 的操作方法   //无密码的连接字符串 string conStr = "Provider=Microsoft.Ace.OleDb.12.0;"; c ...

  8. 动态加载script 和 link

    1.script EventUtil.addHandler(window, "load", function(event){ var script = document.creat ...

  9. where 泛型类型参数及约束

    private void InsertData<TRowMetadata, TFieldMetadata, TCellMetadata>(IMetadataReader<TRowMe ...

  10. How to manually remove an infected file from your computer

    http://blog.csdn.net/pipisorry/article/details/41258577 How to manually remove an infected file from ...