小编use*_*164的帖子

C线程中的自增量是否安全?

我在FreeRTOS(FreeRTOSV7.4.0\FreeRTOS\Source\tasks.c)中找到了一些代码:

void vTaskSuspendAll( void )
{
    /* A critical section is not required as the variable is of type
    portBASE_TYPE. */
    ++uxSchedulerSuspended;
}
Run Code Online (Sandbox Code Playgroud)

它明确表示不需要保护,因为类型是"portBASE_TYPE",这是一个"长"类型.我的理解是它假设这种类型的自增量是原子的.但是在我拆开它后我找不到任何证据,它是一个普通的load-> add-> store.那是一个问题吗?

void vTaskSuspendAll( void )
{
        /* A critical section is not required as the variable is of type
        portBASE_TYPE. */
        ++uxSchedulerSuspended;
 4dc:   4b03            ldr     r3, [pc, #12]   ; (4ec <vTaskSuspendAll+0x10>)
 4de:   f8d3 2118       ldr.w   r2, [r3, #280]  ; 0x118
 4e2:   1c50            adds    r0, r2, #1
 4e4:   f8c3 0118       str.w   r0, [r3, #280]  ; 0x118 …
Run Code Online (Sandbox Code Playgroud)

c freertos

15
推荐指数
3
解决办法
1671
查看次数

为什么我可以在C++中从外部访问私有方法?

可能重复:
为什么允许通过基类的指针调用派生类的私有虚方法?

最近,我遇到了一个奇怪的问题,请参考以下代码:

#include <iostream>

using namespace std;

class A
{
    public:
        virtual void disp() {
            cout<<"A disp"<<endl;
        }

};

class B : public A
{
    private:
        void disp() {
            cout<<"B disp"<<endl;
        }
};

int main()
{
    A a;
    a.disp();

    A *b = new B();
    b->disp();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

A disp
B disp
Run Code Online (Sandbox Code Playgroud)

我想知道为什么指针b可以访问disp()?这是私人的!不是吗?

c++

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

标签 统计

c ×1

c++ ×1

freertos ×1