我有这个过程图。在每个线程中都开始新进程。首先是进程 1,当它结束时会发布信号,下一个可能的进程是 2 和 4。
此图解释更多:1:http: //i49.tinypic.com/34t5uo0.png。我的脚本有时会崩溃。进程 1、2 或 4 不执行。哪里有问题?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
sem_t semA,semB,semC,semD,semE;
void* process_2 (void* param)
{
sem_wait(&semA);
int pid2, status2;
pid2 = fork ();
if ( pid2 < 0 ) {
exit(1);
}
if ( pid2==0 ) {
printf("Process 2\n");
}
else {
wait(&status2);
sem_post(&semC);
}
return NULL;
}
void* process_4(void* param)
{
sem_wait(&semB);
int pid4, status4;
pid4 = fork ();
if ( pid4 < 0 ) {
exit(1);
}
if ( pid4==0 ) {
printf("Process 4\n");
exit(0);
}
else {
wait(&status4);
sem_post(&semD);
}
return NULL;
}
void* process_3(void* param)
{
sem_wait(&semC);
int pid3, status3;
pid3 = fork();
if (pid3 < 0) {
exit(0);
}
if (pid3 == 0) {
printf("Process 3\n");
}
else{
wait(&status3);
sem_post(&semE);
}
return NULL;
}
void* process_5(void* param)
{
sem_wait(&semD);
sem_wait(&semE);
int pid5, status5;
pid5 = fork();
if (pid5 < 0) {
exit(0);
}
if (pid5 == 0) {
printf("Process 5\n");
}
else{
wait(&status5);
exit(0);
}
return NULL;
}
int main () {
pthread_t thread_id[4];
pthread_create(&thread_id[0], NULL,&process_2, NULL);
pthread_create(&thread_id[1], NULL,&process_3, NULL);
pthread_create(&thread_id[2], NULL,&process_4, NULL);
pthread_create(&thread_id[3], NULL,&process_5, NULL);
sem_init(&semA,0,0);
sem_init(&semB,0,0);
sem_init(&semC,0,0);
sem_init(&semD,0,0);
sem_init(&semE,0,0);
int pid, status;
pid = fork ();
if ( pid < 0 ) {
exit(1);
}
if ( pid==0 ) {
printf("Process 1\n");
}
else {
wait(&status);
sem_post(&semA);
sem_post(&semB);
int i;
for (i = 0; i < 4; i++)
pthread_join(thread_id[i],NULL);
return 0;
}
exit(0);
}