仲恺建设局网站鬼佬做爰网站
目录
定义
特点
不可重入函数示例
可重入函数示例
访问共享资源的可重入函数示例
定义
可重入函数是指可以被多个线程或进程同时调用,且在调用过程中被中断,然后再次调用,不会出现错误的函数。即使在这些并发调用的情况下,函数每次执行都能产生正确的结果。
特点
- 不依赖共享的静态或全局变量:可重入函数不使用静态或全局变量来保存中间状态。因为如果多个线程同时调用使用了共享静态或全局变量的函数,可能会导致数据竞争。
 - 不调用不可重入的函数:如果一个函数调用了不可重入的函数,那么它本身也不是可重入的。例如,标准 C 库中的 
strtok函数不是可重入的,因为它使用静态变量来保存内部状态。如果在可重入函数中调用strtok,就会破坏可重入性。而strtok_r是strtok的可重入版本,可以在可重入函数中使用。 - 对共享资源的访问是线程安全的:如果函数需要访问共享资源(如文件、设备等),它必须使用同步机制(如互斥锁、信号量等)来确保对共享资源的访问是线程安全的。
 
不可重入函数示例
int count = 0;
int non_reentrant_function() {count++;return count;
} 
        在多线程环境下,不同线程调用 non_reentrant_function 时,count 的值会因为并发访问而变得不可预测。
可重入函数示例
int reentrant_function(int num) {int local_count = 0;local_count += num;return local_count;
} 
每个线程调用 reentrant_function 时,local_count 都是独立的,不会相互干扰。
访问共享资源的可重入函数示例
#include <stdio.h>
#include <pthread.h>pthread_mutex_t file_mutex = PTHREAD_MUTEX_INITIALIZER;void reentrant_file_write(const char *data) {pthread_mutex_lock(&file_mutex);FILE *file = fopen("test.txt", "a");if (file) {fputs(data, file);fclose(file);}pthread_mutex_unlock(&file_mutex);
} 
        这里使用互斥锁 file_mutex 来保护对文件的访问,确保多个线程不会同时写入文件,从而保证了函数的可重入性。
