局部变量的浸染域-多线程和函数里的静态变量
当前位置:以往代写 > C/C++ 教程 >局部变量的浸染域-多线程和函数里的静态变量
2019-06-13

局部变量的浸染域-多线程和函数里的静态变量

局部变量的浸染域-多线程和函数里的静态变量

试试下面这段代码的输出是什么?

#include <stdio.h>
#include <process.h>
#include <windows.h>

class foo
{
public:
    foo()
    {
        printf( "before sleep\n" );
        Sleep( 1000 );
        printf( "after sleep\n" );
    }
    void test()
    {
        printf( "in test\n" );
    }
};

foo* bar()
{
    static foo a;
    return &a;
}

unsigned __stdcall thread( void* )
{
    foo* p = bar();
    p->test();
    return 0;
}

int _cdecl main( int argc, char** argv )
{
    for( int i = 0; i < 10; ++i )
    {
        uintptr_t t = _beginthreadex( NULL, 0, thread, NULL, 0, NULL );
        CloseHandle( (HANDLE)t );
    }

    Sleep( 5000 );
    return 0;
}

不知道C/C++尺度有什么划定没有, 但粗看起来仿佛是编译器的问题呀。我用的是vc8,谁资助测测此外编译器。

按照星星的发起,把输出贴出来,如下:

before sleep
in test
in test
in test
in test
in test
in test
in test
in test
in test
after sleep
in test

这里的问题是至少有10其中的9个线程没有等工具初始化完成,就已经挪用工具的要领了,这必定是差池的。我或许看了一下反汇编的功效,实际上还大概呈现结构函数被挪用多次的环境。

要办理这个问题,在编译器的条理上要容易一点。假如是在用户措施的条理上,则贫苦的多,因为这类要领城市涉及到另一个静态变量的初始化。

    关键字:

在线提交作业