Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71967
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 291
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-29 14:47
文章存档

2014年(13)

2013年(15)

我的朋友

分类: C/C++

2013-12-12 11:10:09

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;//静态创建互斥锁
该函数用于互斥锁的初始化。pthread_mutex_init()动态的创建互斥锁,参数attr指定新建互斥锁的属性,为空,使用默认
的互斥锁属性,默认属性为快速互斥锁。成功返回0,其他返回表示错误。执行成功,互斥锁被初始化为未锁状态。
int pthread_mutex_destroy(pthread_mutex_t *mutex);注销一个互斥锁,要求锁当前处于开放状态。
锁操作:加锁pthread_mutex_lock(),解锁pthread_mutex_unlock(),测试加锁pthread_mutex_trylock();

#include
#include
#include

void* func(void *arg);
pthread_mutex_t mutex;

int main(int argc,char *argv[])
{
  int err;
  if(argc<2)
    exit(1);
  pthread_t td1,td2;

  pthread_mutex_init(&mutex,NULL);
  if((err=pthread_create(&td1,NULL,func,(void*)argv[1]))!=0)
  {
    printf("td1 create failed %d\n",err);
    exit(1);
  }
  if((err=pthread_create(&td2,NULL,func,(void*)argv[2]))!=0)
  {
     printf("td2 create failed %d\n",err);
     exit(1);
   }

   pthread_join(td1,NULL);
   pthread_join(td2,NULL);
   return 0;
}
void* func(void* arg)
{
  char *a=(char*)arg;
  //pthread_mutex_lock(&mutex);  加锁和不加锁是完全的两种结果

  while(*a!='\0')
  {
    printf("%c",*a);
 /*清空文件缓冲区,文件以写方式打开时将缓冲区内容写入文件
      fflush(stdin)刷新标准输入缓冲区,把输入缓冲区的东西丢弃(非标准)
      fflush(stdout)刷新标准输出缓冲区,把输出缓冲区的东西打印到标准输出设备上
      printf("*************");后面加ffush(stdout)可提高打印效率*/
    fflush(stdout);
    a++;
    sleep(1);
  }
  printf("\n");
 // pthread_mutex_unlock(&mutex);
}

阅读(818) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~