我注意到的是,当线程打印一个线程的计数器然后是其他线程时,fork打印交错的计数器.所以线程不是那么平行,但行为更串行为什么呢?难道我做错了什么?
另外,pthread_join究竟做了什么?即使我不做pthread_join,程序运行也类似.
这是我的线程代码
voID * thread1(voID *a){ int i =0;for(i=0; i<100; i++) printf("Thread 1 %d\n",i);}voID * thread2(voID *b){int i =0;for(i=0; i<100; i++) printf("Thread 2 %d\n",i);}int main(){pthread_t tID1,tID2;pthread_create(&tID1,NulL,thread1,NulL);pthread_create(&tID2,thread2,NulL);pthread_join(tID1,NulL);pthread_join(tID2,NulL);return 0;}
这是我的fork代码
int main(voID){pID_t childPID;childPID = fork();if(childPID >= 0) // fork was successful{ if(childPID == 0) // child process { int i; for(i=0; i<100;i++) printf("\n Child Process Counter : %d\n",i); } else //Parent process { int i; for(i=0; i<100;i++) printf("\n Parent Process Counter : %d\n",i); }}else // fork Failed{ printf("\n Fork Failed,quitting!!!!!!\n"); return 1;}return 0;}
编辑:
如何使线程程序更像fork程序?即计数器打印交织.
您已经支持发现同步机制的需求 – 互斥体,信号量,条件变量,线程障碍等.您想要做的就是它们存在的原因以及您应该使用什么来实现目标.
在您的上一个问题上,pthread_join从死的,可连接的(即未分离的)线程中回收一些资源,并允许您检查过期线程中的任何返回变量.在你的程序中,它们主要用作阻塞机制.也就是说,main将阻止这些调用,直到线程到期.如果没有pthread_joins,您的main将结束并且进程将死亡,包括您创建的线程.如果你不想加入线程并且没有在main中做任何有用的事情,那么在main中使用pthread_exit,因为这将允许main退出但线程继续处理.
总结以上是内存溢出为你收集整理的c – 螺纹和叉子全部内容,希望文章能够帮你解决c – 螺纹和叉子所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)