线程安全和可重入函数
malloc 是线程安全的,但是不可重入。malloc 在堆上分配内存,而其内部为了效率,维护了一个堆块链表,这个链表是全局静态变量,导致它不是可重入的。
socket()是可重入的,它底层使用系统调用。
内核在执行系统调用时,处于进程上下文,即引发系统调用的那个进程。在进程上下文中,内核可以休眠并且可以被抢占,而新的进程可能会调用同样的系统调用,所以系统调用必须保证是可重入的。
线程安全和可重入函数 | 拾荒志
malloc 是线程安全的,但是不可重入。malloc 在堆上分配内存,而其内部为了效率,维护了一个堆块链表,这个链表是全局静态变量,导致它不是可重入的。
socket()是可重入的,它底层使用系统调用。
内核在执行系统调用时,处于进程上下文,即引发系统调用的那个进程。在进程上下文中,内核可以休眠并且可以被抢占,而新的进程可能会调用同样的系统调用,所以系统调用必须保证是可重入的。
线程安全和可重入函数 | 拾荒志