日期:2014-05-16  浏览次数:20776 次

新手求助互斥锁添加问题
题目要求是包含两个进程的线程,一个线程完成累加,另一个用于接收字符并回显,其中有道小题是用互斥锁实现互斥并说明原理。原理我知道是因为两个线程没互斥而导致第一个线程时间片用完却没执行,第二个线程执行并改变x的值,但是互斥锁我没学过怎么用,所以请大家帮忙
我的两个线程代码已经写完了
#include<stdio.h>
#include<pthread.h>
int x=1,sum;
void sumx(void)
{
  int i=0;
  printf("进程1开始\n");
  for(i=0;i<1000000000;i++)
  {
  sum=sum+x;
  }
  printf("sum=%d\n",sum);
}
void setx(void)
{
  printf("线程2开始");
  x=0;
  printf("线程2结束");
}

我知道线程1加锁和解锁在for语句前后就可以,但是互斥定义和初始化我不太会,大家谁教教我

------解决方案--------------------
C/C++ code

#include<stdio.h>
#include<pthread.h>

int x=1,sum;
pthread_mutex_t m_CS;
void sumx(void)
{
    pthread_mutex_lock( &m_CS );
    int i=0;
    printf("进程1开始\n");

    for(i=0;i<1000000000;i++)
    {
        sum=sum+x;
    }
    printf("sum=%d\n",sum);
    pthread_mutex_unlock( &m_CS );
}

void setx(void)
{
    pthread_mutex_lock( &m_CS );
    printf("线程2开始");
    x=0;
    printf("线程2结束");
    pthread_mutex_unlock( &m_CS );
}

int main()
{
    pthread_mutex_init( &m_CS, NULL );
    //之后创建2个线程


    //线程都结束后
    pthread_mutex_destroy( &m_CS );
    return 0;
}