Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于C语言中的可重入性_C_Reentrancy - Fatal编程技术网

关于C语言中的可重入性

关于C语言中的可重入性,c,reentrancy,C,Reentrancy,如果您有一个库f_func()中的函数,并且您知道它是不可重入的,那么您将如何在线程化环境(POSIX)中使用它?您无法访问库的源代码。您可以将其包装在互斥锁中。下面是一个示例用法: pthread_mutex_t f_func_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&f_func_mutex); f_func(); // if f_func has "side effects", such as setting

如果您有一个库
f_func()
中的函数,并且您知道它是不可重入的,那么您将如何在线程化环境(POSIX)中使用它?您无法访问库的源代码。

您可以将其包装在互斥锁中。下面是一个示例用法:

pthread_mutex_t f_func_mutex = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_lock(&f_func_mutex);

f_func();

// if f_func has "side effects", such as setting a global, you'll want to grab
// the value within the locked region:
int local = global_set_by_f_func;

pthread_mutex_unlock(&f_func_mutex);

您必须将其建模为共享资源,并将其封装在互斥锁(或类似的互斥锁)中?“共享资源”、“互斥体”等等?你可以像其他人说的那样用互斥体来保护它。。。但如果只有一个线程调用它,则可能不需要这样做。