Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121930
  • 博文数量: 41
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-21 22:50
文章分类

全部博文(41)

文章存档

2010年(1)

2007年(23)

2006年(17)

我的朋友

分类: C/C++

2007-04-15 19:53:22

char *get_buffer()
{
      static char buf[100];
      return buf;
}
get_buffer函数是不可重入的。因为当2个以上的线程都使用get_buffer的返回值去访问buf缓冲区的时候,先往buf写入的数据就可能被后写入的数据覆盖。

void *thread1(void *params)
{
      char *buf = get_buffer();
      strcpy(buf, "string1");
}

void *thread2(void *params)
{
      char *buf = get_buffer();
      strcpy(buf, "string2");
}


thread1不能保证buf的内容是"string1",thread2不能保证 buf的内容是"string2"。函数“不可再入”就是指函数的实现不保证函数在多线程环境下是正确的。函数中如果没有使用到全局变量或者在使用全局变量的时候使用互斥的信号量来保证线程独占资源,那个这个函数就是“可重入”的。
阅读(1280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~