2011-04-07 48 views

回答

4

C++语言和标准库没有信号灯,甚至线程的任何概念。答案完全取决于你在做什么平台;例如,Windows和Linux系统API支持信号量。

+0

不完全正确,因为C++ 0x有'std :: thread'和'std :: mutex' ... – 2011-04-07 22:20:06

+0

@ChrisDodd:严格来说,“会有”。这仍然只是一个草案,尽管是最后一个! – 2011-04-07 22:41:10

1

如果您使用工具(至少的螺纹部)的C++ 11标准库的编译器,你会使用std::mutex X;,或可能std::recursive_mutex X;std::timed_mutex X;std::recursive_timed_mutex X;,这取决于你想要什么样的能力(缺乏一个声明,否则表明,我想你想要std::mutex)。

对于较旧的库,您可能需要使用pthreads等效项。如果你需要支持Windows(本身不包括pthreads),你可以使用Anthony Williams的pthreads-win32包。这有两个好处:第一,它是Posix和类似Posix的系统(例如Linux)的本地特性,第二,虽然它使用略有不同的名称,但其基本思想几乎就像C++ 11标准库中的内容,它在你的编译器支持它时应该很容易改变。

2

由于C++ 2003将有一段时间看看Boost.Thread。你不会在那里找到一个信号量,但是对于你想要做的事情来说,这可能太低了。

+0

“二进制信号量”与互斥量非常相似,这可能是OP想要的。所以Boost.Thread应该没问题。 +1 – 2011-04-07 23:00:36