首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

进程间同步(又一个有关问题)

2012-02-21 
进程间同步(又一个问题)1 #include stdio.h2 #include stdlib.h3 #include unistd.h4 #include pth

进程间同步(又一个问题)
1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 #include <pthread.h>
  5 #define MAX_THREAD_NUM 100 
  6 static int count = 0;
  7 pthread_mutex_t mutex;
  8 static pthread_mutex_t fork_mutex;
  9 void *ThreadFunc(void *arg)
 10 {
 11 pid_t pid;
 12 pthread_mutex_lock(&fork_mutex);
 13 pid = vfork();
 14 int *i = (int*)arg;
 15 if(pid < 0)
 16 {
 17 printf("fork error\n");
 18 exit(0);
 19 }
 20 if(pid == 0)
 21 {
 22 execl("/bin/pwd","pwd",NULL);
 23 pthread_mutex_lock(&mutex);
 24 count++;
 25 printf("child%d---count=%d\n",*i,count);
 26 pthread_mutex_unlock(&mutex);
 27 exit(0);
 28 }  
 29 else if(pid > 0)
 30 {
 31 sleep(1);
 32 pthread_mutex_lock(&mutex);
 33 count--;
 34 printf("parent%d---count=%d\n",*i,count);
 35 pthread_mutex_unlock(&mutex);
 36 }  
 37 waitpid(pid);
 38 pthread_mutex_unlock(&fork_mutex);
 39 }  
 40 
 41 int main()
 42 {
 43 int i = 0;
 44 int thread_num = 5;
 45 pthread_t threadid[MAX_THREAD_NUM];
 46 pthread_mutex_init(&mutex,NULL);
 47 pthread_mutex_init(&fork_mutex,NULL);
 48 for(i=0; i<thread_num; i++)
 49 {
 50 pthread_create(&threadid[i],NULL,ThreadFunc,&i);
 51 }
 52 
 53 for(i=0; i<thread_num; i++)
 54 {
 55 pthread_join(threadid[i],NULL);
 56 }
 57 printf("count=%d\n",count);
 58 }

为什么子进程在执行完execl后就不向下执行了。
该代码执行结果为:
parent0---count=-1
/home/node104/jzhe/he/code
parent1---count=-2
/home/node104/jzhe/he/code
parent2---count=-3
/home/node104/jzhe/he/code
parent3---count=-4
/home/node104/jzhe/he/code
parent4---count=-5
count=-5

[解决办法]
汗,仔细看一下execl这个函数的作用吧。然后自己想想应该就知道了

热点排行