当前位置: 技术问答>linux和unix
全局变量问题求助
来源: 互联网 发布时间:2017-01-03
本文导语: 问题大致如下: 有一个链表, 两个线程。 链表的起始地址存放在一个全局标量中。 两个线程,线程一不定期的向链表中添加节点和删除节点,线程二每隔5分钟去遍历一下这个链表,遍历完后将这个链表清...
问题大致如下:
有一个链表, 两个线程。 链表的起始地址存放在一个全局标量中。 两个线程,线程一不定期的向链表中添加节点和删除节点,线程二每隔5分钟去遍历一下这个链表,遍历完后将这个链表清空。
现在问题就来了,假如线程一和线程二同时操作这个链表该怎么办啊?还有,假如线程二遍历完了链表,正要清空链表, 这时线程一要向链表中添加节点该咋办啊?
群里的高手们能不能给一个简单可行的解决方案啊? 尽量说的详细点,不要只说个用互斥锁、条件变量等来实现, 这个谁都会说的。
有一个链表, 两个线程。 链表的起始地址存放在一个全局标量中。 两个线程,线程一不定期的向链表中添加节点和删除节点,线程二每隔5分钟去遍历一下这个链表,遍历完后将这个链表清空。
现在问题就来了,假如线程一和线程二同时操作这个链表该怎么办啊?还有,假如线程二遍历完了链表,正要清空链表, 这时线程一要向链表中添加节点该咋办啊?
群里的高手们能不能给一个简单可行的解决方案啊? 尽量说的详细点,不要只说个用互斥锁、条件变量等来实现, 这个谁都会说的。
|
互斥量(或者无名信号量也行) s 初值为1
thread1
sem_wait( &s )
向链表中添加节点和删除节点
sem_post( &s );
thread2
sem_wait( &s )
遍历链表,遍历完后将这个链表清空
sem_post( &s )
这样每次只有1个人在做,保证互斥。
thread1
sem_wait( &s )
向链表中添加节点和删除节点
sem_post( &s );
thread2
sem_wait( &s )
遍历链表,遍历完后将这个链表清空
sem_post( &s )
这样每次只有1个人在做,保证互斥。