Unix 线程同步,使用读写锁
来源:互联网 发布:东方project知乎 编辑:程序博客网 时间:2024/05/07 12:33
#include <stdlib.h>
#include <pthread.h>
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_relock_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->q_tail = jp; /* list was empty */
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 == qp->q_head) {
qp->q_head = jp->j_next;
if (qp->q_tail == jp)
qp->q_tail = NULL;
} else if (jp == qp->q_tail) {
qp->q_tail = jp->j_prev;
if (qp->q_head == jp)
qp->q_head = NULL;
} 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_head; jp != NULL; jp = jp->j_next)
if (pthread_equal(jp->j_id, id))
break;
pthread_rwlock_unlock(&qp->q_lock);
return(jp);
}
- Unix 线程同步,使用读写锁
- 线程同步-读写锁
- UNIX环境高级编程——线程同步之读写锁以及属性
- UNIX环境高级编程——线程同步之读写锁以及属性
- 2线程同步:读写锁
- Linux线程同步-----读写锁
- 线程同步之读写锁
- Unix/Linux线程同步互斥量的使用
- UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)
- UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)
- Unix线程同步
- unix线程同步
- Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步之读写锁
- Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步之读写锁
- 线程同步——读写锁
- 程序员面试100题之16斐波那契 编程之美2.09
- visual box上安装minix-2.0.4
- 0-1背包问题(多种解法)
- [android研究联系人之一]联系人IM/website数据操作
- android 获取设备Id等信息
- Unix 线程同步,使用读写锁
- 水鱼五笔编码练习系统
- javaWeb中文件的上传
- 好久没有写博客了,有些生疏了
- “保存文件”对话框使用实例
- Matlab plot选项
- 在Excel中使用VB编写Micro入门
- 魅族创始人黄章:一个木匠造手机的传奇
- 文件的上传