进程间同步(又一个问题)
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这个函数的作用吧。然后自己想想应该就知道了