我在进程,线程,信号量,ipc等方面都是新手(Linux上的操作系统操作很快)......我的问题是我编译了我的代码而它只是陷入了如此有趣的地步。流程被执行,但他们无法进入他们的线程'功能。之后,程序直接结束而不做任何事情。我真的无法弄清楚问题是在这里还是一切都有问题。我不知道。
#define _GNU_SOURCE
#include <sys/types.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
void * function1(void *ptr)
{
printf("Function 1\n"); //!Test prints
printf("Index is %d",*((int *)ptr));
sleep(1);
pthread_exit(NULL);
}
void * function2(void *ptr)
{
printf("Function 2\n"); //!Test prints
printf("Index is %d",*((int *)ptr));
sleep(2);
pthread_exit(NULL);
}
int main(){
//...
int *index;
int i;
pid_t f;
int number_of_process=5;
pthread_t thread1, thread2;
//...
for(i=0; i<number_of_process; i++)
{
f=fork();
if(f==-1)
{
printf("Fork Error!!\n");
exit(1);
}
if(f==0) //To block child processes re-enter
{
*index = i; //I store index number for each process here. I'll need them in the thread functions
break;
}
}
/*******************PARENT PROCESS********************/
if(f!=0){
// wait for all children to exit
while (f = waitpid (-1, NULL, 0)){
if (errno == ECHILD)
break;
}
exit(0);
}
/*******************CHILD PROCESS*********************/
else{
pthread_create(&thread1,NULL,function1,(void *)index);
pthread_create(&thread2,NULL,function2,(void *)index);
}
}
答案 0 :(得分:3)
执行进程,但无法进入其线程的功能。 之后,程序直接结束而不做任何事情。
那是因为主线程(即fork()
创建的子进程)不等待线程完成执行。所以它给你的印象是程序退出而不调用所有的pthread函数。
创建线程后使用pthread_join():
...
pthread_create(&thread1,NULL,function1,(void *)index);
pthread_create(&thread2,NULL,function2,(void *)index);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
...
由于线程打印而没有任何同步,输出可能会交错。