免费注册 查看新帖 |

Chinaunix

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

如何将资源锁定? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-24 21:40 |只看该作者 |倒序浏览
就是类似于pv 操作

比如我有一个
char * a[5000];

我想让一个线程处理 2-30 这些段

另一个线程处理40-50

并锁定这些项 别的线程在他们没处理完以前不能操作

改怎么做?

论坛徽章:
0
2 [报告]
发表于 2005-03-24 22:11 |只看该作者

如何将资源锁定?

使用semphore,或者mutex

论坛徽章:
0
3 [报告]
发表于 2005-03-25 09:20 |只看该作者

如何将资源锁定?

pthread_mutex_t  lck;
pthread_mutex_lock(&lck);
.......
.......
pthread_mutex_unlock(&lck);

注意,如果不是第一次加锁,最好用trylock。

论坛徽章:
0
4 [报告]
发表于 2005-03-25 16:39 |只看该作者

如何将资源锁定?

pthread_mutex_t  lck;
和我的数组怎么联系?
char * a[5000];

给段代码?

论坛徽章:
0
5 [报告]
发表于 2005-03-25 17:00 |只看该作者

如何将资源锁定?

我覺得你定義兩個指針, 分別指向你希望控制的兩段 .
兩個線程分別對這兩個指針進行pthread_mutex_lock再加上條件變量 , 應該就可以了, 但也不能避免惡意的對數組進行修改.

论坛徽章:
0
6 [报告]
发表于 2005-03-25 18:40 |只看该作者

如何将资源锁定?

原帖由 "benjiam" 发表:


给段代码?


比方说这样:


  1. pthread_mutex_t  lock = PTHREAD_MUTEX_INITIALIZER;//让所有线程都能看见
  2. 线程1:
  3. pthread_lock(&lock);
  4. //修改你要保护的数据
  5. pthread_unlock(&lock);

  6. 其他线程:
  7. pthread_try_lock(&lock);//如果lock已经被锁了,或出错返回
  8. //或者上面也可以改成pthread_lock,这样就会等待
  9. //修改你要保护的数据
  10. pthread_unlock(&lock);
复制代码



其实把mutex看成一个二值信号量就可以了。(个人感觉比系统V的信号量简单了1万倍,那个SysV信号量害得我花了整整一晚上读UNPv2原文才弄明白)

论坛徽章:
0
7 [报告]
发表于 2005-03-25 18:41 |只看该作者

如何将资源锁定?

对了,我没检查函数出错的情况,自己加上吧

论坛徽章:
0
8 [报告]
发表于 2005-12-03 20:55 |只看该作者
pthread_mutex_t  lock = PTHREAD_MUTEX_INITIALIZER;//让所有线程都能看见
线程1:
pthread_lock(&lock);
//修改你要保护的数据
pthread_unlock(&lock);

其他线程:
pthread_try_lock(&lock);//如果lock已经被锁了,或出错返回
//或者上面也可以改成pthread_lock,这样就会等待
//修改你要保护的数据
pthread_unlock(&lock);

如果
其他的线程

pthread_lock(&lock);//如果lock已经被锁了 这样就会等待
//修改你要保护的数据
pthread_unlock(&lock);

和你的代码 有什么区别吗?
一个是等待 另一个可以去做一点别的事情 然后再回来

论坛徽章:
0
9 [报告]
发表于 2005-12-04 01:41 |只看该作者
关键的问题就在于,对于普通资源来说,只有所谓 Advisory Locking 而不存在 Mandatory Locking;你必须让所有需要参加访问控制的执行体(线程/进程)遵照同样的“协议”去进行互斥,否则 Linux 无法保证资源的保护。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP