线程安全型队列的实现

Rice1210 2011-11-28 07:39:39
老师要求编写一个线程安全的队列,所谓线程安全,就是该队列能够实现多个线程同时正确的增删改队列结点,也就是能够实现对队列这个临界资源的保护。
完成该队列后,自己编写一个测试程序,生成多个线程同时读写该队列,验证你的队列执行是否正确,并给出测试报告。
自己不会编求各位大侠帮助啊。。
...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rice1210 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wshjldaxiong 的回复:]

引用 1 楼 jjwu_hdu 的回复:
内部用一个list存放资源
然后用一个互斥和一个条件变量,线程同步最资源的操作
对外接口两个就够了
一个push()
一个pop()

1楼其实已经说得很明白,再具体一点就是。
首先,你这个队列写好了之后要严格执行一点:任何一个线程都绝对不能直接操作这个队列,想要增删节点一定要通过你写的函数来进行,可以把这两个函数命名为push()和po……
[/Quote]
我只能说我实在太弱了。。看不明白,,自己写不出程序代码。。
我自己写不来代码,,有没有直接写好的代码。。
小默 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jjwu_hdu 的回复:]
内部用一个list存放资源
然后用一个互斥和一个条件变量,线程同步最资源的操作
对外接口两个就够了
一个push()
一个pop()
[/Quote]
1楼其实已经说得很明白,再具体一点就是。
首先,你这个队列写好了之后要严格执行一点:任何一个线程都绝对不能直接操作这个队列,想要增删节点一定要通过你写的函数来进行,可以把这两个函数命名为push()和pop(),一个负责增一个负责删。

在这两个函数中,一定要使用互斥机制(这个方式可以多种,4楼已经给出了一种),那么就能保证同一时间只有一个线程在执行该函数,其他线程必须等待,这样一来就能保证多个线程就能正确的增删节点了。

你要求中的“同时”其实只是感觉上的同时,因为线程的切换会很快,你感觉不出先后,而实际上的同时却是不可能的,也是不应该实现的。

互斥机制不了解的话,请自行百度。
qq120848369 2011-12-02
  • 打赏
  • 举报
回复
lock;
op;
unlock;
caddor 2011-12-02
  • 打赏
  • 举报
回复
对队列 对写 , 容易

网上很多 类似代码

如果用 c++ std::queue

队列都不用你写了

Rice1210 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jjwu_hdu 的回复:]

内部用一个list存放资源
然后用一个互斥和一个条件变量,线程同步最资源的操作
对外接口两个就够了
一个push()
一个pop()
[/Quote]
太抽象了。。能不能具体点啊。。
给点代码程序什么的。。
jjwu_hdu 2011-11-28
  • 打赏
  • 举报
回复
内部用一个list存放资源
然后用一个互斥和一个条件变量,线程同步最资源的操作
对外接口两个就够了
一个push()
一个pop()

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧