免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2959 | 回复: 4
打印 上一主题 下一主题

线程见同步问题:一个数组可以同时写,读的时候需要锁定? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-15 18:25 |只看该作者 |倒序浏览
多个线程对一个矢量vector进行写,当遇到锁定的时候,不能操作;
读的时候需要将vector锁定,防止其他线程写入数据,然后进行操作,将vector中的数据删除,解锁。

怎么实现?用信号量或者Event或者其他方法?

论坛徽章:
0
2 [报告]
发表于 2003-04-15 18:33 |只看该作者

线程见同步问题:一个数组可以同时写,读的时候需要锁定?

有互斥锁可以使用

如果是在UNIX下线程直接使用线程互斥锁就可以了
在UNIX下进程间要使用信号灯

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-04-15 19:15 |只看该作者

线程见同步问题:一个数组可以同时写,读的时候需要锁定?

1、线程同步常用的方式有两种,一种是互斥锁。该机制适合于数个线程对共享资源的同时访问所带来的问题。
示例代码如下:

  1. 。。。。
  2. pthread_mutexattr_t  *attr;
  3. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  4. 。。。。
  5. if( ( ret = pthread_mutex_init(&mutex ,NULL) )  != 0 ) {
  6. (void)fprintf(stderr,"pthread_mutex_init error\n");
  7. return PINIT_FAILED;
  8. }
  9. 。。。。
  10. if( ( ret = pthread_mutex_lock(&mutex )  != 0 ) {
  11. (void)fprintf(stderr,"pthread_mutex_lock error\n");
  12. return PLOCK_FAILED;
  13. }
  14. /*该处是要保护的资源*/
  15. 。。。。
  16. if( ( ret = pthread_mutex_unlock(&mutex )  != 0 ) {
  17. (void)fprintf(stderr,"pthread_mutex_lock error\n");
  18. return PUNLOCK_FAILED;
  19. }
  20. 。。。
复制代码

需要说明的是对于静态分配的互斥锁,建议做pthread_mutex_init,有些系统并不做初始化的工作。
2、另外常用的一种是条件变量,该机制类似于信号处理,通过阻塞与等待条件变量信号来实现。可参看下面的调用。
pthread_cond_wait
pthread_cond_timedwait
pthread_cond_signal
pthread_cond_broadcast

[/code]

论坛徽章:
0
4 [报告]
发表于 2003-04-17 09:45 |只看该作者

线程见同步问题:一个数组可以同时写,读的时候需要锁定?

如果是用STL的vector,则无须特别处理。STL本身是线程安全的。

论坛徽章:
0
5 [报告]
发表于 2003-04-17 18:10 |只看该作者

线程见同步问题:一个数组可以同时写,读的时候需要锁定?

写的时候锁,读时就别锁了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP