我在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) 我想这是一个关于左值实例化排序的更普遍的问题。
简而言之,这安全吗?:
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)