Chinaunix

标题: 这样用两个互斥锁能同步这两个线程么? [打印本页]

作者: iw1210    时间: 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;
}
作者: iw1210    时间: 2013-01-23 15:01
如果多个线程使用同一个函数作为线程函数,那么如果想在这个函数里定义同步对象(互斥锁、条件变量、信号灯等),就必须把它们定义成 static 类型吧?
作者: safedead    时间: 2013-01-23 15:22
回复 1# iw1210


   
你基本概念就是混乱的
作者: lrita    时间: 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;
}
作者: iw1210    时间: 2013-01-23 15:24
回复 4# lrita

什么意思?
   
作者: iw1210    时间: 2013-01-23 15:25
回复 3# safedead


   ?
作者: lrita    时间: 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;
}

作者: safedead    时间: 2013-01-23 15:30
lrita 发表于 2013-01-23 15:26
int   D = 0;

两个锁:


这个是标准的正确的用法

作者: JohnBull    时间: 2013-01-23 18:45
LZ还是报个培训班系统学一下APUE吧
作者: 梦醒潇湘love    时间: 2013-01-23 19:53
你的用法真心不对。。
作者: 一刀。    时间: 2013-01-23 22:08
线程同步必须用条件变量




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2