Tôi đang sử dụng cả API socket Linux và Win32. Trong chương trình của tôi, nhiều luồng chia sẻ một socket handle. Cụ thể, nhiều chủ đề gọi send
bằng tay cầm socket được chia sẻ (tức là, cùng một cổng). Trong trường hợp này, tôi có phải đặt khóa cho an toàn luồng không? Tôi không thể tìm ra câu trả lời. Tôi có thể làm một bài kiểm tra, nhưng muốn nghe kinh nghiệm của bạn.C socket API có an toàn không?
EDIT: Tôi biết rằng dữ liệu gửi qua ổ cắm đó không phải là hoạt động nguyên tử chút nào. Chắc chắn chúng ta phải sử dụng một mutex cho an toàn thread. Tuy nhiên, tôi đã tự hỏi liệu các API hệ thống có thể có khóa nội bộ riêng của họ. Nếu vậy, chúng ta có thể bỏ qua việc đặt khóa riêng của mình.
Câu hỏi này cũng có thể áp dụng cho chức năng fprintf
. Tôi tự hỏi các API hệ thống như vậy sẽ có khóa riêng của chúng. Theo kinh nghiệm của tôi, gọi fprintf
từ nhiều chủ đề không giết chương trình của tôi mặc dù đã có các cuộc đua trên một tệp hoặc thiết bị xuất chuẩn (tức là các kết quả không nhất quán hoặc không thể đoán trước được, nhưng chương trình không bị lỗi), ngụ ý fprintf
có khóa để bảo vệ nội bộ của chúng cấu trúc dữ liệu.
Nhiều chủ đề đọc và ghi vào cùng một socket, theo ý kiến của tôi, một vấn đề thiết kế thực tế. – theMayer