Xcode 5.0 とブースト 1.54 を使用しています。次のコードは、Visual Studio 2008 SP1 を使用すると正常にコンパイルされますが、Xcode ではコンパイルされません。
template <class Rep, class Period>
bool try_lock_for(const boost::chrono::duration<Rep, Period> &_rel_time)
{
return m_mutex.try_lock_for(_rel_time);
}
Xcode で「'boost::mutex' に 'try_lock_until' という名前のメンバーがありません」というエラーが表示されます。
boost/mutex.hpp と boost/thread.hpp をインクルードしています。Xcode プロジェクトは、Apple LLVM 5.0 と GNU99 C++ 方言を使用するようにセットアップされています。「try_lock_until(...)」を使用すると、同様のコンパイル エラーが発生します。
boost::mutex は、2 つのプラットフォームで異なるように定義されているようです。Windows では、コードは次のようになります。
namespace detail
{
typedef ::boost::detail::basic_timed_mutex underlying_mutex;
}
class mutex:
public ::boost::detail::underlying_mutex
{
...
}
そのため、Windows では boost::mutex は時限ミューテックスを継承しますが、xcode では pthreads を使用する単なるクラスです (try_for などのサポートなし)。
Windows と MacOS の両方でブースト ミューテックス (try_for を使用) を使用する正しい方法は何ですか? どんな助けでも大歓迎です。