相关疑难解决方法(0)

C++是否读取和写入了原子?

我有两个线程,一个更新一个int,另一个读取它.这是一个统计值,其中读取和写入的顺序无关紧要.

我的问题是,我是否需要同步访问这个多字节值?或者,换句话说,写入的一部分可以完成并被中断,然后读取就会发生.

例如,假设值= 0x0000FFFF,其值递增为0x00010000.

是否有时间值看起来像0x0001FFFF,我应该担心?当然,类型越大,发生这种情况的可能性就越大.

我总是同步这些类型的访问,但很好奇社区的想法.

c++ multithreading synchronization

79
推荐指数
4
解决办法
3万
查看次数

std :: thread.join()死锁

我不明白为什么这个简单的代码片段有死锁:

#include <atomic>
#include <thread>
#include <memory>

using namespace std;
class Test {
public:

    Test() : mExit( false )
    {
        mThread = thread( bind( &Test::func, this ) );
    }

    ~Test()
    {
        if ( mThread.joinable() )
        {
            mExit = true;
            mThread.join();
        }
    }

private:
    void func() 
    {
        while ( !mExit )
        {
            // do something
        }
    }

private:
    atomic< bool > mExit;
    thread mThread;
};

typedef unique_ptr< Test > TestPtr;
TestPtr gTest;

int main()
{
    gTest = TestPtr( new Test ); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

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

赋值=和减法赋值 - = C中的原子操作?

int b = 1000;
b -= 20;
Run Code Online (Sandbox Code Playgroud)

上面的任何一个是原子操作吗?什么是C中的原子操作?

c atomic

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

标签 统计

c++ ×2

multithreading ×2

atomic ×1

c ×1

synchronization ×1