thể trùng lặp:
Malloc thread-safe?malloc() là không reentrant nhưng thread-an toàn?
Tôi không phải là một chút nhầm lẫn trong khi tôi đang đọc "The Programming Interface Linux".
Từ cuốn sách, nó nói rằng malloc là không reentrant vì nó thao tác cấu trúc dữ liệu danh sách liên kết toàn cầu nhưng được làm an toàn thread bằng cách sử dụng mutex.
Tôi hơi bối rối về điều này: vì nó an toàn với thread bằng cách sử dụng mutex và do đó có thể được gọi bởi nhiều hơn một luồng cùng một lúc, tại sao nó không phải là một hàm reentrant? (nếu chúng tôi nói rằng reentrant có nghĩa là nó có thể được gọi bởi nhiều hơn một người gọi cùng một lúc)
Một câu hỏi khác là, vì malloc là an toàn thread, chúng ta có thể đặt nó trong một bộ xử lý tín hiệu? Tôi nghĩ rằng câu trả lời là có nhưng tôi không chắc chắn vì theo cuốn sách này, nó nói rằng chỉ có một reentrant hoặc async-tín hiệu an toàn chức năng có thể được đưa vào xử lý tín hiệu.
Có ai có thể giải thích điều này cho tôi không?
Mutex có được bao gồm trong triển khai của malloc không? – Bingo