我的档案test8.cpp
是
#include<thread>
#include<mutex>
#include<chrono>
std::mutex mutex;
std::timed_mutex timed_mutex;
编译此代码时
g++ -std=c++11 -pthread -c test8.cpp
它告诉我
名称空间'std'中的timed_mutex未命名类型
我在Cygwin64下编译,gcc版本4.8.2
=============================================== ===================
<@> @Jonathan Wakely
答案 0 :(得分:2)
timed_mutex
类型仅在平台支持时定义。 GCC&#39; <mutex>
中的预处理器条件是:
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
如果平台定义了可用的<stdint.h>
标头,则定义
#if _GTHREAD_USE_MUTEX_TIMEDLOCK
如果通过_POSIX_TIMEOUTS
标头将宏<unistd.h>
定义为正值,则定义。
如果未定义第一个宏,那么您也无法使用std::mutex
,因此似乎只有第二个宏未定义,这意味着Cygwin的Pthreads实现不会支持超时功能。
用于检查超时功能的测试类似于:
#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是否有帮助。