Có thực hiện Haskell MVar
nào trong C không? Có một example về cách triển khai nó trong C++. Nhưng, tôi sẽ muốn thực hiện nó trong C - chúng ta hãy nói rằng chỉ có MVar CInt
tương đương trong C cho bây giờ. Viết nguyên gốc đồng bộ hóa có thể phức tạp. Vì vậy, tôi sẽ muốn tránh trùng lặp nỗ lực nếu ai đó đã thực hiện nó. Tôi không hiểu ví dụ C++ ở trên cũng đủ để tự tin dịch nó thành C - nó ẩn các chi tiết thuật toán rất tốt từ C++ của tôi - tâm thiếu kinh nghiệm :)Thực hiện MVar trong C?
Lý do tôi nghĩ về viết MVar trong C là vì nó làm cho việc sử dụng FFI ràng buộc với thư viện C bên ngoài để lấy luồng dữ liệu và sử dụng các chủ đề Haskell để lấy dữ liệu (từ vectơ Storable để tránh marshaling dữ liệu - MVar CInt ở đây lưu trữ bao nhiêu Storable vectơ đã được lấp đầy). Tôi cần đảm bảo rằng các luồng C ghi vào các vị trí đáng yêu bị chặn trong khi luồng Haskell đang đọc dữ liệu. Đó là nơi đồng bộ MVar trên mặt C giúp. Nó cũng nhanh hơn nhiều khi gọi hàm C không an toàn hoặc thậm chí an toàn từ Haskell (~ 15ns cho không an toàn, ~ 150ns cho an toàn trong thử nghiệm của tôi), hơn gọi lại vào Haskell từ C (~ 5us). Nếu callbacks nhanh, tôi sẽ có chức năng C gọi lại vào Haskell thay vào đó, và chặn Haskell MVar.
Cập nhật:
Thuật toán trong pseudo-code sẽ làm tốt. Nó sẽ được khá dễ dàng để thực hiện nó trong C, cho các thuật toán cho newEmptyMVar, takeMVar và putMVar.
Đối với những người không quen thuộc với 'MVar' của Haskell, hãy xem: [Control.Concurrent.MVar] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Concurrent-MVar. html) –
Tôi không thể giúp bạn với câu hỏi của bạn, nhưng nơi mà bạn đã nhận được thời gian cho các cuộc gọi nước ngoài giữa Haskell và C. Hôm qua, tôi đã lang thang như thế nào để chuẩn mực đó bằng cách sử dụng tiêu chí. – jmg
@jmg, mã ở đây (cho haskell-> C): http://hpaste.org/56609. Không có tiêu chuẩn điểm chuẩn ở đó nhưng nên được khá đơn giản để làm, và kết quả nên được khá gần. Đối với C-> Haskell gọi lại, xem mã trong bài đăng này: http://stackoverflow.com/questions/8902568/runtime-performance-degradation-for-c-ffi-callback-when-pthreads-are-enabled – Sal