免费注册 查看新帖 |

Chinaunix

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

pthread_mutex_t的疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-08 19:32 |只看该作者 |倒序浏览
pthread_mutex_t        mutex;
pthread_mutex_init(&mutex, NULL);

void func()
{
        pthread_mutex_lock(&mutex);

        // codings

        pthread_mutex_unlock(&mutex);
}

问题:
1 一个线程A调用该函数(执行过程中),同时另一个线程B也调用该函数,B是被阻塞还是lock失败返回(man 中好象没有对这个进行说明呀  锁初始化时 type 指定为default)

2 是原子操作吗?
  codings执行中来了一个信号,线程如何动作??

论坛徽章:
0
2 [报告]
发表于 2004-01-08 20:35 |只看该作者

pthread_mutex_t的疑惑

第一个问题肯定是阻塞的。
我觉得你是不是把“原子操作”理解错了,理解成pthread_mutex_lock和pthread_mutex_unlock之间是原子的?
我在aix 4.3上测试的结果是pthread_mutex_lock阻塞过程中,如果来了信号,在信号处理函数执行后,仍将阻塞在pthread_mutex_lock上,与sigaction设不设SA_RESTART无关。就是说,“有限等待”这一点没有做好(不过通过setjmp()和longjmp()也可以实现)。另外,在Richard Stevens的《unix网络编程》卷二中提到,互斥锁只能用于上锁,而不能用于等待(188页),但是我通过编程序测试发现,在aix4.3上互斥锁既能用于上锁,也能用于等待,说穿了就是个值在{0,1}范围内的信号灯,完全能实现生产者和消费者的互斥(187页),但是,与上锁的例子相比(400页),完成相同次数上锁和解锁的互斥过程完成时间非常长。
由于条件所限,我只能做这些,大家谁有另外的开发平台,请做一下测试看看。

论坛徽章:
0
3 [报告]
发表于 2004-01-12 15:45 |只看该作者

pthread_mutex_t的疑惑

第二个问题:
倘若在第1楼主的范例代码//coding处发生了信号,并且信号处理函数也调用
同一函数func(),  程序就会死锁.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP