advanced-go-programming-book
advanced-go-programming-book copied to clipboard
2.6.3 改进:闭包函数作为比较函数 有一点点小疑惑
除了全局这种代理之外,还有其他什么办法嘛?感觉这样绕来绕去很复杂,还有就是这样就没法并发,改进的话?有大佬提示一下思路吗?
C语言最大的限制是全局函数,全局函数要绑定到qsort的数组必须一个额外的指针。 有一些折中的优化:可以定义很多全局的cmp函数,然后分配给不同的数组,这样并发度会大一点。
对于qsort来说,这个函数的接口设计有点缺陷:就是没有为cmp额外携带一个参数。 比如设计为下面这样:
void qsort(
void* base, size_t num, size_t size,
int (*cmp)(const void* a, const void* b, void* ctx),
void* cmp_ctx
);
为cmp增加一个ctx参数,就可以避免这个问题。
所以核心问题是qsort在排序不同数组的时候,将它们统一绑定到了固定的全局函数。 全局函数无法动态获取当前排序的数组。