免费注册 查看新帖 |

Chinaunix

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

[C++] 关于 pthread_mutex_t的使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-16 12:28 |只看该作者 |倒序浏览
class Inc:public Thread
{
public:
        Inc(int id, int *inc):Thread(id), value(inc){};
private:
        int *value;
        void run()
        {
                this->lock.enterCriticSection();
                for(int i = 0; i < 30; ++i)
                {
                        std::cout << (*value)++ << "  thread_id " << this->id << std::endl;
                        int s;
                        for(int j = 0; j < 40000; ++j) //为了让cpu执行到时间片完而让与给其他线程
                                s++;
                }
                this->lock.leaveCriticSection();
        }
};

Thread类有一个lock对象,lock对象有一个pthread_mutex_t对象。
enterCriticSection函数是给pthread_mutex_lock的包裹函数,leaveCriticSection是pthread_mutex_unlock的包裹函数。
value是从主线程传进来的一块内存,我在主线程创建了两个Inc线程,用来对value自加。如果不加锁,会出现交叉情况,我现在加锁是为了让一个线程先执行完,另一个线程接着执行不会有交叉,但是结果跟我不用锁的结果差不多,请问这样用为什么不对呢?

[ 本帖最后由 cheney_lang 于 2008-1-16 13:00 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-16 12:55 |只看该作者
你的lock对象是类的静态成员么?如果不是你创建了两个线程对象,是不是意味着你的两个thread各锁各的,互不干扰呢?

论坛徽章:
0
3 [报告]
发表于 2008-01-16 14:43 |只看该作者
谢谢楼上的,确实是如此,搞定
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP