#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
{
pthread_rwlock_wrlock(&qp->q_lock);
jp->j_next = qp->q_head;
jp->j_prev = NULL;
if
qp->q_head->j_prev = jp;
else
/* list was empty */
qp->q_head = jp;
pthread_rwlock_unlock(&qp->q_lock);
}
void job_append(struct queue *qp, struct
{
pthread_rwlock_wrlock(&qp->q_lock);
jp->j_next = NULL;
jp->j_prev = qp->q_tail;
if
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
{
pthread_rwlock_wrlock(&qp->q_lock);
if
qp->q_head = jp->j_next;
if
qp->q_tail = NULL;
else if
qp->q_tail = jp->j_prev;
if
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
{
struct
if
return(NULL);
for
if
break;
pthread_rwlock_unlock(&qp->q_lock);
return(jp);
}
Unix 线程同步,使用读写锁
转载
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Linux线程同步之读写锁
<br />1. 特性: 一次只有一个线程可以占有写模式的读写锁, 但是可以有多个线程同时占有读模式的读写锁 . 正是因为这个
linux 数据结构 工作 读写锁 加锁 -
线程同步和锁的使用
假设现在有三个线程,同时去销售100张车票,我们知道一张车票只能销售一次,如果不使用线程锁就可能出现一张车票同时被三个
java spring jvm 显式 System -
线程同步、锁
Java 同步块Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Ja
java 数据结构与算法 数据库 死锁 Java -
centos虚拟机重启后没有没有IP了
计算机基础计算机系统计算机是由硬件系统(Hardware)和软件系统(Software)两大部分组成 硬件系统 主机 中央处理器 &
centos虚拟机重启后没有没有IP了 操作系统 运维 内存管理 服务器