程序简介:多线程的进程通过fork函数创建子进程时,如果要清除各种锁的状态,可以通过调用pthread_atfork函数建立fork处理程序。
运行示例(红色字体的为输入):
thread started...
parent about to fork...
preparing locks...
parent unlocking locks...
parent returned from fork
child unlocking locks...
child returned from fork
注解:
1:父进程通过fork创建了子进程。子进程不但继承了父进程整个地址空间的副本,也继承了所有的互斥量,读写锁和条件变量的状态,如果父进程包含多个线程,子进程在fork返回之后,如果不是紧接着使用exec的话,就要清理锁状态。
2:pthread_atfork最多可以安装三个帮助清理锁的函数。prepare函数将在fork创建子进程之前被调用,通常可以用来获取进程中的所有锁;parent在fork创建子进程后返回前在父进程中被调用,可以用来释放父进程中的锁;child在fork创建子进程后fork返回前在子进程中被调用,可以用来释放子进程中的锁。给这三个参数传递NULL,表示不调用该函数。