把所有的输出printf使用一个互斥的信号量同步一下就行了吧,C的标准库不是线程安全的。
你就一个信号量,而且两个线程都是先sem_wait,你的两个线程都会卡在sem_wait(&sem1)你可以把其中给一个线程的sem_wait跟sem_post换个位置试一下
struct rwlock
{
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)
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)