小编Nat*_*wen的帖子

使用C以编程方式检查Linux中的僵尸子进程

我在RedHat Linux中编写了一个简单的C程序,它在调用execv后等待使用waitpid的子进程.

int main( int argc, char * argv[] )
{
    int pid;
    int status = 0;
    int wait_ret;

    const char * process_path = argv[1];

    if ( argc < 2 )
    {
        exit( EXIT_FAILURE );
    }

    pid = fork(); //spawn child process

    if ( 0 == pid ) //child
    {
        int ret = execv( process_path, &argv[1] );

        if ( ret )
        {
            printf( "execv failed: %s\n", strerror( errno ) );
        }

        exit( EXIT_SUCCESS );
    }

    //wait for the child to …
Run Code Online (Sandbox Code Playgroud)

c zombie-process wait

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

std::lock_guard 构造函数实例化顺序

我想这是一个关于左值实例化排序的更普遍的问题。

简而言之,这安全吗?:

void func1()
{
    std::lock_guard< std::mutex > lock( mutex );
    //do some stuff in locked context
}

void func2()
{
    func1();
    std::lock_guard< std::mutex > lock( mutex );
    //do some stuff in locked context
}
Run Code Online (Sandbox Code Playgroud)

我有点担心编译器可能会在从 func2 内部调用 func1 之前调用 lock_guard 的构造函数,从而导致死锁。

是保证这是安全的还是我需要做这样的事情:

void func1()
{
    std::lock_guard< std::mutex > lock( mutex );
    //do some stuff in locked context
}

void func2()
{
    func1();

    { //lock
        std::lock_guard< std::mutex > lock( mutex );
        //do some stuff in locked context
    } //unlock
}
Run Code Online (Sandbox Code Playgroud)

c++ locking language-lawyer c++11

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

标签 统计

c ×1

c++ ×1

c++11 ×1

language-lawyer ×1

locking ×1

wait ×1

zombie-process ×1