+ -
当前位置:首页 → 问答吧 → 全局变量问题求助

全局变量问题求助

时间:2011-09-26

来源:互联网

问题大致如下:
  有一个链表, 两个线程。 链表的起始地址存放在一个全局标量中。 两个线程,线程一不定期的向链表中添加节点和删除节点,线程二每隔5分钟去遍历一下这个链表,遍历完后将这个链表清空。
  现在问题就来了,假如线程一和线程二同时操作这个链表该怎么办啊?还有,假如线程二遍历完了链表,正要清空链表, 这时线程一要向链表中添加节点该咋办啊?

  群里的高手们能不能给一个简单可行的解决方案啊? 尽量说的详细点,不要只说个用互斥锁、条件变量等来实现, 这个谁都会说的。

作者: linux_6   发布时间: 2011-09-26

互斥量(或者无名信号量也行) s 初值为1

thread1
sem_wait( &s )
向链表中添加节点和删除节点
sem_post( &s );

thread2
sem_wait( &s )
遍历链表,遍历完后将这个链表清空
sem_post( &s )

这样每次只有1个人在做,保证互斥。

作者: DIE654456   发布时间: 2011-09-26

Linux 读写锁
http://blog.csdn.net/dai_weitao/article/details/1752843

作者: zmlovelx   发布时间: 2011-09-26

引用 1 楼 die654456 的回复:

互斥量(或者无名信号量也行) s 初值为1

thread1
sem_wait( &s )
向链表中添加节点和删除节点
sem_post( &s );

thread2
sem_wait( &s )
遍历链表,遍历完后将这个链表清空
sem_post( &s )

这样每次只有1个人在做,保证互斥。


噢, 这个是信号量来实现的吧? 请问一下它和mutex互斥锁有何区别啊? 我看了一下好像没有什么区别,用锁的话就是lock和unlock, 这个换成了sem_wait和sem_post,好像没有什么区别。

作者: linux_6   发布时间: 2011-09-26

引用 3 楼 linux_6 的回复:
引用 1 楼 die654456 的回复:

互斥量(或者无名信号量也行) s 初值为1

thread1
sem_wait( &s )
向链表中添加节点和删除节点
sem_post( &s );

thread2
sem_wait( &s )
遍历链表,遍历完后将这个链表清空
sem_post( &s )
……

信号量与互斥锁是有区别的。
信号量初始值如果是1 那么与互斥锁就没什么区别, 如果大于1,就不一样了。

作者: zmlovelx   发布时间: 2011-09-26