2012-02-28 35 views
5

Tôi đã làm việc trên một ứng dụng C (Linux) đa luồng trong một thời gian - một máy ghi video có chủ đề để ghi âm, quay video, mã hóa, ghép kênh và viết.Khung ứng dụng đa luồng C hoặc mẫu

Tôi bắt đầu ném nó cùng nhau bằng cách sử dụng các hoạt động pthread, nhưng bây giờ tôi đang cố gắng mở rộng nó để hỗ trợ nhiều tiểu bang và khối cấu trúc lại được bật lên như trùng lặp để thực hiện với khóa, đặt cờ và báo hiệu một điều kiện, v.v.

Cho đến nay những gì tôi đã đưa ra một cái gì đó như thế này:

  • Mỗi thread nên có một khóa mutex và hai điều kiện - một để đánh thức các chủ đề và người kia để báo hiệu các chủ đề đã kết thúc làm một số công việc mà một sợi khác có thể đang đợi.
  • Hàng đợi dữ liệu được "sở hữu" bởi một chuỗi nhất định và được bảo vệ bằng khóa của chuỗi đó.
  • Mỗi chuỗi cần khái niệm trạng thái "hoạt động" và "không hoạt động" và khả năng di chuyển giữa các trạng thái đó và báo hiệu khi hoàn thành.

Tôi dự định lưu trữ các phần tử chung trong cấu trúc và có một loạt các cấu trúc đó mà tôi có thể lặp lại để bắt đầu, kiểm tra và dừng tất cả các chuỗi.

Khi điều này trở thành mô hình hỗ trợ chủ đề chung hơn, tôi nghĩ tôi có thể tái phát minh ra bánh xe, vì vậy tôi sẽ hỏi ở đây nếu có một số mẫu nổi tiếng tôi nên áp dụng.

+1

Hãy xem [Glib] (http://developer.gnome.org/glib/stable/ glib-core.html) –

+0

@AlexandreC.Tôi không biết nhiều về Glib nhưng có vẻ như nó chỉ tóm tắt các chủ đề và thêm trọng lượng.Tôi đang tìm kiếm một mô hình tương tác chủ đề – blueshift

Trả lời

4

Ý tưởng của bạn nhắc nhở tôi rất nhiều mô hình tính toán đối tượng đang hoạt động được triển khai trong khung máy trạng thái QP. Cụ thể, các khung công tác QP/C và QP/C++ đã được chuyển sang POSIX (bao gồm Linux, BSD, v.v.). Cổng này đã được mô tả chi tiết trong Ghi chú Ứng dụng "QP và Linux" có tại: http://www.state-machine.com/linux/AN_QP_and_Linux.pdf.

Dưới đây là những điểm nổi bật của cảng QP sang Linux:

máy
  • Mỗi tiểu bang thực hiện trong riêng p sợi của nó. Các khối p-thread trên một hàng đợi sự kiện được thực hiện với một mutex và một biến điều kiện. Khi hàng đợi sự kiện nhận được một sự kiện, các luồng unblocks và sự kiện được xử lý bởi máy trạng thái được kết hợp với luồng này. (Đây là mô hình tính toán đối tượng hoạt động nổi tiếng.)

  • Hàng đợi sự kiện được sở hữu bởi chủ đề đối tượng hoạt động.

  • Mỗi thread có toàn bộ máy nhà nước theo cấp bậc, vì vậy nó có thể có trạng thái "hoạt động" hoặc "không hoạt động'. Máy nhà nước phân cấp (biểu đồ trạng thái UML) cho phép bạn chỉ định hành động và chuyển tiếp ở trạng thái mức độ cao hơn và tái sử dụng này hoạt động trong các trạng thái lồng nhau. Điều này chống lại các "trạng thái" chuyển tiếp trạng thái mà bạn có với FSM truyền thống.

+0

Điều này trông cực kỳ thú vị và có liên quan, cảm ơn bạn! – blueshift

Các vấn đề liên quan