免费注册 查看新帖 |

Chinaunix

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

[C] 这样用两个互斥锁能同步这两个线程么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-23 14:44 |只看该作者 |倒序浏览
本帖最后由 iw1210 于 2013-01-23 14:52 编辑

这样用两个互斥锁能同步这两个线程么?

数据D:
int   D;

两个锁:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;

线程函数1:

void threadfun1()
{
       while(1)
      {
              pthread_mutex_lock(&mutex1); //lock
              D  = 8;
             pthread_mutex_unlock(&mutex1); //unlock
       }
        return;
}

线程函数2:

void threadfun2()
{
       while(1)
      {
              pthread_mutex_lock(&mutex2); //lock
              D  = 9;
              pthread_mutex_unlock(&mutex2); //unlock
       }
        return;
}

论坛徽章:
0
2 [报告]
发表于 2013-01-23 15:01 |只看该作者
如果多个线程使用同一个函数作为线程函数,那么如果想在这个函数里定义同步对象(互斥锁、条件变量、信号灯等),就必须把它们定义成 static 类型吧?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-01-23 15:22 |只看该作者
回复 1# iw1210


   
你基本概念就是混乱的

论坛徽章:
0
4 [报告]
发表于 2013-01-23 15:22 |只看该作者
int   D;


pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


线程函数1:

void threadfun1()
{
      int i;

      {
              pthread_mutex_lock(&mutex1); //lock
              D  = 8;
             pthread_mutex_unlock(&mutex1); //unlock
       }
        return;
}

线程函数2:

void threadfun2()
{
       while(1)
      {
              pthread_mutex_lock(&mutex2); //lock
              D  = 9;
              pthread_mutex_unlock(&mutex2); //unlock
       }
        return;
}

论坛徽章:
0
5 [报告]
发表于 2013-01-23 15:24 |只看该作者
回复 4# lrita

什么意思?
   

论坛徽章:
0
6 [报告]
发表于 2013-01-23 15:25 |只看该作者
回复 3# safedead


   ?

论坛徽章:
0
7 [报告]
发表于 2013-01-23 15:26 |只看该作者
int   D = 0;

两个锁:

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

线程函数1:

void *threadfun1(void * arg)
{
      int i;
      for(i = 0; i < 1000; i++)
      {
              pthread_mutex_lock(&mutex); //lock
              D++;
             pthread_mutex_unlock(&mutex); //unlock
       }
        return NULL;
}

线程函数2:

void *threadfun2(void *arg)
{
       int i;
       for(i = 0; i < 1000; i++)
      {
              pthread_mutex_lock(&mutex); //lock
              D++;
              pthread_mutex_unlock(&mutex); //unlock
       }
        return NULL;
}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2013-01-23 15:30 |只看该作者
lrita 发表于 2013-01-23 15:26
int   D = 0;

两个锁:


这个是标准的正确的用法

论坛徽章:
0
9 [报告]
发表于 2013-01-23 18:45 |只看该作者
LZ还是报个培训班系统学一下APUE吧

论坛徽章:
0
10 [报告]
发表于 2013-01-23 19:53 |只看该作者
你的用法真心不对。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP