多核并行(OpenMP)
#include <stdio.h>
#include <omp.h>
#include <stdlib.h>
int main()
{
#pragma omp parallel num_threads(4)
{
for(int i = 0 ; i < 4 ; i++)
{
for(int j =0 ; j <4 ; j++)
{
printf("(%d,%d)"),i , j;
printf("Thread num: %d \n", omp_get_thread_num());
}
}
}
return 0;
}
gcc -std=c99 parallel.c -o parallel -fopenmp
不加{}默认只对单层循环有效
缺点:不能再非共享内存系统上使用(如计算机集群)
进程等待
pid_t wait(int *status) /*子进程结束,内核会给父进程发送SIGCHLD信号,父进程wait函数捕捉该信号,子进程退出状态通过status参数抓取,可以在父进程中通过status抓取到子进程的不同状态进行不同的操作。函数返回值为子进程的pid,出错返回-1,原因存在errno*/
pid_t waitpid(pid_t pid, int *status, int options)/*pid<-1:等待进程组识别码为|pid|的任何子进程,-1:等待任何子进程,0:等待进程组识别码与目前进程相同的任何子进程,〉0:等待任何子进程识别码为pid的子进程*/
http://blog.csdn.net/guoping16/article/details/6583466
void main(){
pid_t pid,cpid;
pid = fork();
int status;
if( 0 == pid )
{
printf("This is a child process!pid:%d,getpid:%d\n",pid,getpid());
sleep(5);
exit(6);
}else{
cpid = wait(&status);
printf("This is the paraent process!pid:%d,getpid:%d\n",pid,getpid());
if(WIFEXITED(status))
printf("return from wait:%d,status:%d\n",cpid,WEXITSTATUS(status));
}
}