Предоставление полного (на языке C) pthread-интерфейса из библиотеки C ++ на основе c ++ 0x std :: thread - PullRequest
1 голос
/ 24 февраля 2011

Можно ли концептуально написать небольшую библиотеку-обертку, основанную на std::thread (и, возможно, других частях C ++ 0x), которая предоставляет полный интерфейс pthread для программы на C?

(Если вам интересно, как это может быть полезно: в гипотетическом мире, где ядро ​​основной ОС было написано на C ++ с присоединенной к нему полностью совместимой C ++ 0x стандартной библиотекой, это может стать проблемой потому что ядро, о котором я говорю / думаю, не предоставляет интерфейс C, а только библиотеку C Standard, основанную на "нативном" C ++ "backend")

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

В libc ++ есть:

class thread
{
public:
    // ...
    typedef pthread_t native_handle_type;
    native_handle_type native_handle();
    // ...
};

native_handle_type и native_handle () условно поддерживаются.То есть они не должны быть там.Однако, если они есть, и если они основаны на pthreads, то для этого и требуется то, что вы хотите.

1 голос
/ 25 февраля 2011

Да, такая реализация должна быть возможной. В какой-то момент я даже написал простую версию, чтобы доказать, что могу.

Есть несколько хитрых вещей, но большинство вещей (например, мьютексы, условные переменные, потоки) будет простой оболочкой.

Асинхронная отмена - одна из хитрых вещей - она ​​требует поддержки со стороны ОС для асинхронного прерывания потока, поэтому истинная асинхронная отмена не может быть записана поверх «чистых» потоков C ++ 0x. Конечно, вы можете просто отложить отмену до точки отмены в любом случае, хотя, как указывает R, это будет некачественной реализацией функции.

1 голос
/ 24 февраля 2011

IIRC, существует хотя бы асинхронное аннулирование, которое не имеет эквивалента в библиотеке потоков C ++ 0X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...