相关疑难解决方法(0)

什么是_GLIBCXX_USE_NANOSLEEP?

名为_GLIBCXX_USE_NANOSLEEP的预处理器宏出现在两个标准头文件中:

  • C++/4.7.1/x86_64的未知-Linux的GNU /比特/ C++的config.h
  • C++/4.7.1 /线程

在GCC 4.7.1(Linux,64位)的默认构建中,c ++ config.h包含的唯一内容是此注释:

/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
Run Code Online (Sandbox Code Playgroud)

而在线程中,定义std::this_thread::sleep_for()std::this_thread::sleep_until()依赖于要定义的宏.如果没有定义,那么两个函数 - 尽管C++标准都要求 - 也不会被定义.

在我的系统(glibc 2.15)上,虽然nanosleep()函数(声明在ctime)存在并且可操作,但未定义宏.

我想知道这是什么以及如何处理它.特别:

  • 在构建GCC以默认激活此宏时是否应该使用配置选项,如此帖所示?(我在构建过程在线文档中找不到任何内容.)
  • nanosleep()函数和宏之间真的存在关联吗?nanosleep()in ctime/ 的声明time.h似乎不依赖于或定义宏.
  • 在我自己的头文件中定义宏或-D在命令行中作为选项(如相关问题中的建议)是否存在任何特定风险?如果我在一个nanosleep()不可用的系统上执行此操作会怎么样?我该如何找到它?

从GCC 4.8开始更新std::this_thread::sleep_for(),libstdc ++中会自动包含支持等.不再需要配置标志.从GCC 4.8更改日志:

this_thread :: sleep_for(),this_thread :: sleep_until()和this_thread :: yield()的定义不需要配置选项--enable-libstdcxx-time; …

c++ gcc sleep glibc

44
推荐指数
1
解决办法
8109
查看次数

用C++提升 - 好奇的互斥行为

我正在尝试Boost线程,因为据我所知,我可以编写一个多线程Boost应用程序并在Windows或Linux中编译它,而pthreads我更熟悉的是,它严格用于*NIX系统.

我有以下示例应用程序,它是从另一个SO问题中借用的:


#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
#include <iostream>

#define NAP_DURATION    (10000UL)   // 10ms

boost::mutex io_mutex;

void count(int id)
{
    for (int i = 0; i < 1000; ++i)
    {
        boost::mutex::scoped_lock lock(io_mutex);
        std::cout << "Thread ID:" << id << ": " << i << std::endl;
        if (id == 1)
        {
            std::cout << "I'm thread " << id << " and I'm taking a short nap" << std::endl;
            usleep(NAP_DURATION);
        }
        else
        { …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost boost-thread boost-mutex

1
推荐指数
1
解决办法
215
查看次数

标签 统计

c++ ×2

boost ×1

boost-mutex ×1

boost-thread ×1

gcc ×1

glibc ×1

multithreading ×1

sleep ×1