相关疑难解决方法(0)

C++中的易失性11

在C++ 11标准中,机器模型从单线程机器变为多线程机器.

这是否意味着static int x; void func() { x = 0; while (x == 0) {} }优化输出读取的典型示例将不再发生在C++ 11中?

编辑:对于那些不知道这个例子的人(我非常惊讶),请阅读:https://en.wikipedia.org/wiki/Volatile_variable

EDIT2:好的,我真的很期待所有知道volatile这个例子的人.

如果您使用示例中的代码,则循环中读取的变量将被优化,使循环无限.

解决方案当然是使用volatile它会强制编译器在每次访问时读取变量.

我的问题是,如果这是C++ 11中不推荐使用的问题,因为机器模型是多线程的,因此编译器应该考虑对系统中存在的变量的并发访问.

c++ volatile c++11

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

带有阻塞的c ++工作队列

这个问题应该比我的前几个简单一些.我在我的程序中实现了以下工作队列:

Pool.h:

// tpool class
// It's always closed. :glasses:
#ifndef __POOL_H
#define __POOL_H
class tpool {
    public:
        tpool( std::size_t tpool_size );
        ~tpool();
        template< typename Task >
        void run_task( Task task ){
        boost::unique_lock< boost::mutex > lock( mutex_ );
            if( 0 < available_ ) {
                --available_;
                io_service_.post( boost::bind( &tpool::wrap_task, this, boost::function< void() > ( task ) ) );
            }
        }
    private:
        boost::asio::io_service io_service_;
        boost::asio::io_service::work work_;
        boost::thread_group threads_;
        std::size_t available_;
        boost::mutex mutex_;
        void wrap_task( boost::function< void() > task );
};
extern tpool …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost-thread boost-asio threadpool

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