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) |