Trong môi trường unix, các hàm chức năng đôi khi được sử dụng để thực hiện coroutines trong C. Tuy nhiên, các hàm này trực tiếp thao tác ngăn xếp và luồng thực thi. Thông thường khi các chức năng cấp thấp này hoàn toàn khác nhau khi chuyển từ C sang C++.Hàm makecontext()/swapcontext() có tương thích với C++
Vì vậy, câu hỏi đặt ra là, nếu có bất kỳ vấn đề nào với việc triển khai coroutines sử dụng makecontext()
và swapcontext()
. Tất nhiên người ta rõ ràng sẽ phải chăm sóc rất tốt, rằng một ngoại lệ không bao giờ có thể thoát khỏi một coroutine như vậy, vì sẽ không có trình xử lý ngoại lệ nào trên stack cho chương trình này và chương trình rất có thể sẽ bị phân đoạn. Nhưng khác hơn là có bất kỳ sự không tương thích giữa cách C + + xử lý mọi thứ trong nội bộ và makecontext()
và setcontext()
sửa đổi đường dẫn thực hiện?
Tôi chưa bao giờ nghe nói về các chức năng này. Bạn có biết rằng [POSIX 2001] (http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html) đã đánh dấu chúng lỗi thời về chủ đề? –
@larsmans: Một điều đáng tiếc. Những thứ dễ dàng với coroutines khó hơn nhiều với các chủ đề. Có, bạn * có thể * mô phỏng coroutines với chủ đề, nhưng chỉ với overhead (đồng bộ hóa!), Và khi chỉ có một luồng đang chạy bất cứ lúc nào với tất cả những người khác bị chặn, nó không thực sự là những gì luồng có nghĩa là cho. – celtschk