基于c ++ 0x std :: thread从C ++库中公开完整的(C语言)pthread接口

时间:2011-02-24 19:50:51

标签: c++ c c++11 pthreads

在概念上是否可以编写一个基于std::thread(可能还有其他C ++ 0x部分)的小包装器库,它将完整的pthread接口暴露给C程序?

(如果你想知道这是如何有用的:在假设的世界中,主流操作系统内核是用C ++编写的,并且附加了完全符合C ++ 0x标准的库,这将是一个问题。 ,因为我正在谈论/思考的内核没有公开C接口,只有C标准库,基于其“原生”C ++“后端”)

3 个答案:

答案 0 :(得分:1)

IIRC,至少有异步取消,它在C ++ 0X线程库中没有等价物。

答案 1 :(得分:1)

libc++中有:

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

native_handle_type和native_handle()是有条件支持的。也就是说,他们不必在那里。但是,如果他们在那里,并且如果它基于pthreads,那么做你想做的就是为什么这个钩子就在那里。

答案 2 :(得分:1)

是的,这种实施应该是可能的。我甚至在某一点上写了一个简单的版本,只是为了证明我可以。

有一些事情很棘手,但大多数东西(例如互斥体,条件变量,线程)都是一个简单的包装器。

异步取消是棘手的事情之一---它需要OS的支持才能异步中断线程,因此无法在“纯”C ++ 0x线程之上编写真正的异步取消。当然,你可以将取消延迟到取消点,不过如R指出这将是该功能的低质量实现。