ghi các cuộc gọi hàm từ nhiều luồng đến cùng một ổ cắmcó an toàn khi sử dụng chức năng Viết trong GNU C bằng cách sử dụng nhiều chủ đề
có an toàn không? Chúng tôi có muốn thêm tính năng đồng bộ hóa giữa chúng không? Nó sẽ gây ra vấn đề fro như Application bị trì hoãn ghi/đọc từ lớp mạng để lớp Application
Chúng tôi đang sử dụng GNU C++ thư viện GCC 4 trên Linux Redhat enviornment
Đây là một Process Server Side nơi Chỉ có 1 Kết nối Ổ cắm giữa Máy chủ & Máy chủ Khách hàng & Máy khách đang ở trên 2 Máy khác nhau Dữ liệu được gửi từ Máy chủ đến Máy khách tới Máy chủ
Sự cố 1 khi Máy chủ Gửi dữ liệu cho phía máy khách (Nhiều chủ đề viết dat a đến phía máy khách thông qua cùng một Socket) Nhưng dữ liệu Writen từ một số luồng không được chuyển sang phía máy khách, nó thậm chí không đi đến lớp mạng của cùng một máy (Tcpdump không có dữ liệu đó)
Vấn đề 2-khi khách hàng Gửi dữ liệu đến máy chủ dữ liệu Gửi theo khách hàng được hiển thị trong TCPdump của máy chủ không nhận được cho ứng dụng máy chủ đang đọc từ ổ cắm từ một chủ đề duy nhất sử dụng "&" chọn "chức năng trong vòng lặp
Chúng tôi không thể xác định được mô hình xảy ra các sự cố này Chúng tôi cho rằng điều này sẽ xảy ra khi có quá nhiều luồng được ghi vào cùng Ổ cắm Chúng tôi không đồng bộ hóa chức năng ghi hy vọng hệ điều hành đang xử lý việc đồng bộ hóa
Đó là "an toàn" theo nghĩa là chương trình của bạn được tạo đúng, nhưng kết quả mà bạn thấy trên ổ cắm của bạn có thể không phải là những gì bạn mong đợi. –
@KerrekSB: đó là một nhận xét kỳ lạ. Bất kỳ chương trình không an toàn nào có thể được gọi là "an toàn" theo nghĩa đó, phải không? –
@NedBatchelder: Chắc chắn là không. Ví dụ, một hàm phụ thuộc vào một bộ đệm tĩnh để giữ trạng thái bên trong của nó đơn giản là * không * thread-safe, và một chương trình gọi nó nhiều lần đồng thời chỉ là không xác định. Ngược lại, một chương trình gọi 'write' đồng thời không tự động được xác định. –