2015-05-18 11 views
6

Pytam o to z ciekawości.Odpowiednik Mac OS interfejsu Windows Fibres API?

System Windows zapewnia to, co nazywa się Fibers API, który jest interfejsem API dla lekkich procesów/wątków użytkownika.

Byłem zainteresowany wiedząc, czy Mac OS zapewnia również takie funkcje. O ile mogłem się dowiedzieć, najbliższym odpowiednikiem Uniksa byłaby rodzina funkcji setcontext. Jednak próba wywołania takiego interfejsu API w programie Mac generuje ostrzeżenia informujące, że funkcje zostały wycofane od wersji 10.6 systemu OS X. Ponadto, gdy próbuję skompilować i uruchomić przykład podany w powyższym linku do Wikipedii, otrzymuję błąd seg na mojej maszynie przy pierwszym swapcontext.

Najwyraźniej interfejs API setcontext nie nadaje się do komputerów Mac. Nie dłużej. Czy istnieje inny sposób uzyskiwania lekkich wątków po stronie użytkownika w systemie Mac OS? Czy system zapewnia taką funkcjonalność?

+1

Czy obejrzałeś Grand Central Dispatch? –

+0

@ScottHunter, znam niektóre ramy GCD. Ale czy pozwala, na przykład, ręcznie przełączać się między wątkami pracy, jak to jest z włóknami? Nie sądzę, że GCD mógłby być uważany za odpowiednik wątków po stronie użytkownika ... – glampert

+0

Niekoniecznie zrezygnowałbym z zestawu instrukcji Mac OS() tak szybko ... przestarzałe funkcje zwykle działają; po prostu nie gwarantują, że będą obsługiwane w przyszłych wersjach systemu operacyjnego. Może to być po prostu kwestia ulepszenia niektórych szczegółów, aby uzyskać setcontext() działający pod MacOS. –

Odpowiedz

2

Nie, nie ma odpowiednika w systemie OS X (lub większości systemów opartych na systemie UNIX). Seria funkcji ucontext została uznana za przestarzałą w standardzie POSIX i nie zapewniono wymiany.

Najbliższy system OS X to Grand Central Dispatch, który pozwala tworzyć kolejek wysyłki, które wykonują "bloki" (zasadniczo funkcje). Przetwarzanie tych kolejek może zostać zawieszone i wznowione, podobnie jak w przypadku włókien, ale nie można zatrzymać i wznowić wykonywania w połowie bloku.

Istnieje również Boost.Context, który zapewnia podobną funkcjonalność do ucontext (a może nawet używa go wewnętrznie), choć jest to biblioteka C++.

Powiązane problemy