小编dan*_*nny的帖子

在条件变量上调用notify时,互斥锁是否会被解锁

我试图了解在互斥锁用于条件变量时会发生什么.

在以下示例中,取自cppreference

int main()
{
    std::queue<int> produced_nums;
    std::mutex m;
    std::condition_variable cond_var;
    bool done = false;
    bool notified = false;

    std::thread producer([&]() {
        for (int i = 0; i < 5; ++i) {
            std::this_thread::sleep_for(std::chrono::seconds(1));
            std::unique_lock<std::mutex> lock(m);
            std::cout << "producing " << i << '\n';
            produced_nums.push(i);
            notified = true;
            cond_var.notify_one();
        }   

        done = true;
        cond_var.notify_one();
    }); 

    std::thread consumer([&]() {
        std::unique_lock<std::mutex> lock(m);
        while (!done) {
            while (!notified) {  // loop to avoid spurious wakeups
                cond_var.wait(lock);
            }   
            while (!produced_nums.empty()) {
                std::cout << "consuming …
Run Code Online (Sandbox Code Playgroud)

c++ condition-variable c++11

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

"添加断点"快捷方式在xcode 4.3中不起作用

使用键盘快捷键(命令+ \)设置断点对我不起作用.我尝试在xcode首选项中更改键绑定,但它仍然无法正常工作.它看起来不像是系统中另一个快捷方式的冲突.
使用鼠标设置断点工作正常,只有快捷方式不起作用.以前有人遇到过这种问题吗?它让我疯狂.

xcode4.3

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

将std :: shared_ptr与受保护的构造函数\析构函数一起使用

可能重复:
如何在只有受保护或私有构造函数的类上调用:: std :: make_shared?

我想创建一个类的共享指针,并有一个工厂方法返回它,同时保持构造函数\析构函数的保护.由于共享指针无法访问构造函数或析构函数,因此出现编译错误.

我正在使用llvm 4.1,但我正在寻找一个可以独立于编译器的解决方案(除了使构造函数\析构函数公开).

这是一个代码示例:

class Foo
{
public:
    static std::shared_ptr<Foo> getSharedPointer()
    {
        return std::make_shared<Foo>();
    }

protected:
    Foo(int x){}
    ~Foo(){}

};
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c++ shared-ptr c++11

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

在使用Xcode 4.5调试c ++时,单步执行代码会停止在STL代码上

我尝试使用llvm 4.1编译的Xcode 4.5调试c ++代码.代码非常简单,只需将几个项插入到地图中即可.

当我跳过STL函数时,执行在STL代码内停止,而不是像往常一样执行该步骤.

当我使用LLVM-GCC 4.2编译时,调试很好,但是这个编译器没有C++ 11支持.

有没有人遇到过这个问题,并知道它是否可以修复?

c++ debugging xcode c++11 xcode4.5

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