我看到有人建议如果我想要使用标准容器,例如std::queue和std::vector,就应该将它们包装在互斥锁或类似的东西中。
我理解为需要针对每个被多个线程访问的容器实例都需要一个锁,而不是每种类型或任何使用c++标准库。但是这假定标准容器和标准库可以保证可重入性。
那么语言本身是否有这样的保证呢?
我看到有人建议如果我想要使用标准容器,例如std::queue和std::vector,就应该将它们包装在互斥锁或类似的东西中。
我理解为需要针对每个被多个线程访问的容器实例都需要一个锁,而不是每种类型或任何使用c++标准库。但是这假定标准容器和标准库可以保证可重入性。
那么语言本身是否有这样的保证呢?
sort
内部使用sort
? - n. m.int fac(int n) { return n==0 ? 1 : n * fac(n-1); }
fac(3)
的行为是返回 6,即使 fac(4)
正在运行。因此,fac
是可重入的。17.5 [structure.elements]
及其脚注。这明确了在未说明要求时的含义。 - MSalters17.5.5.8
确实似乎让函数重新进入成为实现定义。"除非在此标准中明确指定,否则 C++ 标准库中的哪些函数可以递归重入是实现定义的。"编辑:我刚刚看到了你的编辑,所以我可能会终止这个线程 :) - Merlyn Morgan-Graham