Advanced Programming in UNIX Environment Episode 55
发布日期:2021-10-07 23:47:36
浏览次数:2
分类:技术文章
本文共 1996 字,大约阅读时间需要 6 分钟。
The Single UNIX Specification also defines conditional versions of the reader–writer locking primitives.
#includeint pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
#include#include struct job{ struct job *j_next; struct job *j_prev; pthread_t j_id;};struct queue{ struct job *q_head; struct job *q_tail; pthread_rwlock_t q_lock;};int queue_init(struct queue *qp){ int err; qp->q_head=NULL; qp->q_tail=NULL; err=pthread_rwlock_init(&qp->q_lock,NULL); if(err!=0) return err; return 0;}void job_insert(struct queue *qp, struct job *jp){ pthread_rwlock_wrlock(&qp->q_lock); jp->j_next=qp->q_head; jp->j-prev=NULL; if(qp->q_head!=NULL) qp->q_head->j_prev=jp; else qp->tail=jp; qp->q_head=jp; pthread_rwlock_unlock(&qp->q_lock);}void job_append(struct queue *qp, struct job *jp){ pthread_rwlock_wrlock(&qp->q_lock); jp->j_next=NULL; jp->j_prev=qp->q_tail; if(qp->q_tail!=NULL) qp->q_tail->j_next=jp; else qp->q_head=jp; qp->q_tail=jp; pthread_rwlock_unlock(&qp->q_lock);}void job_remove(struct queue *qp, struct job *jp){ pthread_rwlock_wrlock(&qp->q_lock); if(jp==pq->q_head) { qp->q_head=jp->j_next; if(qp->q_tail==jp) qp->tail=NULL; else jp->j_next->j_prev=jp->j_prev; } else if(jp==qp->q_tail) { qp->q_tail=jp->j_prev; jp->j_prev->j_next=jp->j_next; } else { jp->j_prev->j_next=jp->j_next; jp->j_next->j_prev=jp->j_prev; } pthread_rwlock_unlock(&qp->q_lock);}struct job* job_find(struct queue *qp, pthread_t id){ struct job *jp; if(pthread_rwlock_rdlock(&qp->q_lock)!=0) return NULL; for(jp=qp->q_headp;jp!=NULL;jp=jp->j_next) if(pthread-equal(jp->j_id,id)) break; pthread_rwlock_unlock(&qp->q_lock); return jp;}
Using reader–writer locks
转载地址:https://blog.csdn.net/myfather103/article/details/79824242 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月07日 17时20分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ROS学习过程中的错误记录5 - sw2urdf导出功能包的编译错误
2019-04-28
关于机械臂仿真的几款软件简介
2019-04-28
MATLAB - 符号运算(持续更新)
2019-04-28
机器人动力学 - 机器人学中的惯性矩阵坐标转换及在SolidWorks中的测量
2019-04-28
SolidWorks转Simscape Multibody(两种方案)
2019-04-28
Simscape Multibody —— Revolute Joint的使用
2019-04-28
Ubuntu 主机名及用户名颜色显示问题的解决
2019-04-28
matlab随机函数使用笔记
2019-04-28
matlab数据统计函数使用笔记
2019-04-28
matlab函数重载功能的实现笔记
2019-04-28
在ROS中调用外部链接库文件(.so)配置方法
2019-04-28
webots中的三种建模方式
2019-04-28
Robotics Toolbox在Simulink中的模块库
2019-04-28
Robotics Toolbox 轨迹插值笔记
2019-04-28
MATLAB - 线型、Marker点等属性的设置
2019-04-28
MATLAB - plot中使用LaTeX
2019-04-28
MATLAB - 辨识工具箱的使用
2019-04-28
Eigen与MATLAB常用运算的对应关系
2019-04-28
线程与定时器的区别
2019-04-28
带宽大小及各频段对系统的影响
2019-04-28