我的文件test8.cpp是
#include<thread>
#include<mutex>
#include<chrono>
std::mutex mutex;
std::timed_mutex timed_mutex;
当我编译这段代码
g++ -std=c++11 -pthread -c test8.cpp
它告诉我
timed_mutex in namespace ‘std’ does not name a type
我在Cygwin64下编译,gcc版本4.8.2
================================================== ================
@Jonathan Wakely
最佳答案 仅当平台支持时才定义timed_mutex类型. GCC< mutex>中的预处理器条件.是:
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
如果平台定义了可用的< stdint.h>,则定义它.标题,和
#if _GTHREAD_USE_MUTEX_TIMEDLOCK
如果通过< unistd.h>将宏_POSIX_TIMEOUTS定义为正值,则定义该值.头.
如果没有定义第一个宏,那么你也无法使用std :: mutex,因此似乎只有第二个宏未定义,这意味着Cygwin的Pthreads实现不支持Timeouts功能.
用于检查超时功能的测试类似于:
#include <unistd.h>
// In case of POSIX threads check _POSIX_TIMEOUTS.
#if (defined(_PTHREADS) \
&& (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
#error
#endif
int main() { }
你可以尝试在Cygwin上编译它,并自己检查宏.如果Cygwin确实支持超时功能,那么请report a GCC bug,这样我们就可以让timed_mutex在Cygwin上运行.
编辑:对于GCC 6,我为没有定义_POSIX_TIMEOUTS的平台添加了alternative implementation of std::timed_mutex
.我不知道这对Cygwin是否有帮助.