dm8148 开发之---互斥量、条件量、枷锁、互斥枷锁
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 开发之---互斥量、条件量、枷锁、互斥枷锁的更多相关文章
- Linux Qt使用POSIX多线程条件变量、互斥锁(量)
今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...
- 【C】——信号量 互斥锁 条件变量的区别
信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里).而互斥锁是用在多线程多任务互斥的,一个线程占用了某 ...
- C++11 多线程同步 互斥锁 条件变量
在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...
- 【Java Web开发学习】Spring4条件化的bean
[Java Web开发学习]Spring4条件化的bean 转载:https://www.cnblogs.com/yangchongxing/p/9071960.html Spring4引入了@Con ...
- redis实现点击量/浏览量
java+redis实现高性能新闻点击量更新 1.redis简单介绍.它用来做高性能数据存取 是极好的. 2.实例:新闻点击量. 1)每次刷新,我们并不一定要往数据库里面立即更新数据 2)可以在red ...
- Swift开发第七篇——字面量转换&下标
本篇分为两部分: 一.Swift 中的字面量转换 二.Swift 中的下标 一.Swift 中的字面量转换 所谓字面量就是指像特定的数字,字符串或者是布尔值这样能够直接了当地指出自己的类型并未变量进行 ...
- dm8148 开发只boot启动参数vram=128简介
显存 全称显示内存,即显示卡专用内存.显存对于显卡就好比内存对于整台电脑,地位非常重要,它负责存储显示芯片需要处理的各种数据.显存容量的大小.性能的高低,直接影响着电脑的显示效果.目前,工作站显卡常用 ...
- 【String注解驱动开发】如何按照条件向Spring容器中注册bean?这次我懂了!!
写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不 ...
- 学习WEb前端开发的需要哪些条件
第一阶段--HTML的学习. 超文本标记语言(HyperText Mark-up Language 简称HTML)是一个网页的骨架,无论是静态网页还是动态网页,最终返回到浏览器端的都是HTML代码,浏 ...
随机推荐
- HttpApplication理解
HttpApplication对象是经由HttpApplicationFactory.GetApplicationInstance(并最终调用HttpRuntime.CreateNonPublicIn ...
- webpack配置构建环境问题汇总
环境:node 6.9.5 npm 3.10.10 问题一:Module build failed: TypeError: Path must be a string. Received undef ...
- Automatic Diagnostic Repository
转载自 http://www.eygle.com/archives/2007/08/11g_auto_diag_repository.html#comments Oracle Database 11g ...
- linux下目录大小为什么是4K?一个目录下最多有个多少个子目录?最多有多少个文件?ls -l显示的内容中total到底是什么?
子目录数太多,会影响搜索性能. 在同一个路径下,一级子目录的个数限制为31998,如果你的应用生成的目录可能会超过这个数,那要注意进行目录分级.例如,如果目录名为数字的话,可以将数字除以10000后的 ...
- 织梦默认分页样式改动 解决分页列表显示,去掉li
近期装了个织梦dedecmsV5.7版本号时,调用分页显示出现的结果出现好几行,怎么也不能在一排显示,找了非常多资料,才了解到是由织梦模板中分页加了<Li>列表标签,解决有两种方法,以下将 ...
- web开发者的博客
一. Jerry Qu https://imququ.com/post/sth-about-switch-to-https-2.html 点评:博客做的比较好,样式不错. http知识比较深.
- 转:Android推送技术研究
Android推送技术研究 字数5208 阅读4026 评论5 喜欢35 前言 最近研究Android推送的实现, 研究了两天一夜, 有了一点收获, 写下来既为了分享, 也为了吐槽. 需要说明的是有些 ...
- 通过终端安装程序sudo apt-get install ***时出错:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何动态显示当前运行行
在F11运行状态下,点击Online-Display Flow Control然后可以看到绿色的行就是当前正在运行行 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http:// ...
- pip安装mysql报错 ld: library not found for -lssl
ld: library not found for -lssl clang: error: linker command failed with exit code (use -v to see in ...