{
sem_t read
sem_t write
int reads
}
void RWLock_Init(rwlock &lock)
{
sem_init(lock.read, 0, 1)
sem_init(lock.write, 0, 1)
lock.reads = 0
}
void Acquir_read_lock(rwlock &lock)
{
sem_wait(&lock.read)
++lock.reads
if(lock.reads == 1)
{
sem_wait(&lock.write)
}
sem_post(&lock.write)
}
void acquir_read_unlock(rwlock &lock)
{
sem_wait(&lock.read)
--lock.reads
if(lock.reads == 0)
{
sem_post(&lock.write)
}
sem_post(&lcok.read)
}
void acquir_write_lock(rwlock &lock)
{
sem_wait(&lock.write)
}
void acquir_write_unlock(rwlock * lock)
{
sem_post(&lock.write)
}
1.声明信号量sem_t sem1
2.初始化信号量sem_init(&sem1,0,1)
3.sem_post和sem_wait函数配合使用来达到线程同步
4.释放信号量int sem_destroy (sem_t *sem1)
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)