Chinaunix

标题: 请问C语言中如何实现两个语句并发执行? [打印本页]

作者: dragonq    时间: 2004-04-13 18:38
标题: 请问C语言中如何实现两个语句并发执行?
如函数main()中调用func1()和func2(),我想让这两个函数并发执行,该如何来写?
谢谢!
作者: flw    时间: 2004-04-13 18:43
标题: 请问C语言中如何实现两个语句并发执行?
用多线程。
作者: pandaisme    时间: 2004-04-13 18:51
标题: 请问C语言中如何实现两个语句并发执行?
这和c语言关系不大,关键要操作系统支持才可以
作者: dragonq    时间: 2004-04-13 19:24
标题: 请问C语言中如何实现两个语句并发执行?
有这样的例子吗?
麻烦贴一个,谢谢!
作者: dragonq    时间: 2004-04-13 21:47
标题: 请问C语言中如何实现两个语句并发执行?
难道没有像SHELL中的&一样功能的函数吗?
func1和func2不需要通信,只是因为两个函数都需要等待,所以想让他们并发执行!
没有简单一些的做法吗?
作者: parady    时间: 2004-04-13 23:23
标题: 请问C语言中如何实现两个语句并发执行?

  1. #include <stdio.h>;
  2. #include <mpi.h>;

  3. int main(int argc,char **argv)
  4. {
  5.         int rank;
  6.         MPI_Init(&argc,&argv);
  7.         MPI_Comm_rank(MPI_COMM_WORLD,&rank);
  8.         if(rank == 0) func1();
  9.         else func2();
  10.         MPI_Finalize();
  11.         return 0;
  12. }
复制代码
[/code]
作者: linuxmj    时间: 2004-04-13 23:48
标题: 请问C语言中如何实现两个语句并发执行?
[quote]原帖由 "parady"][/quote 发表:



如何让它们并发执行呢?
我想用多处理机才行吧!
上述做法肯定称不上并发。
首先要弄懂并发的宏观和微观的意义才行

请高手不吝赐教
作者: liuchuanwenno1    时间: 2004-04-14 09:49
标题: 请问C语言中如何实现两个语句并发执行?
并发 & 并行!
作者: lizuoyong    时间: 2004-04-14 11:14
标题: 请问C语言中如何实现两个语句并发执行?

  1. #include <stdio.h>;
  2. #include <unistd.h>;
  3. #include <stdlib.h>;
  4. #include <pthread.h>;

  5. void *thread_function(void *arg);

  6. char message[] = "Hello World";

  7. int main() {
  8.     int res;
  9.     pthread_t a_thread;
  10.     void *thread_result;
  11.     res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
  12.     if (res != 0) {
  13.         perror("Thread creation failed");
  14.         exit(EXIT_FAILURE);
  15.     }
  16.     printf("Waiting for thread to finish...\n");
  17.     res = pthread_join(a_thread, &thread_result);
  18.     if (res != 0) {
  19.         perror("Thread join failed");
  20.         exit(EXIT_FAILURE);
  21.     }
  22.     printf("Thread joined, it returned %s\n", (char *)thread_result);
  23.     printf("Message is now %s\n", message);
  24.     exit(EXIT_SUCCESS);
  25. }

  26.     void *thread_function(void *arg) {
  27.     printf("thread_function is running. Argument was %s\n", (char *)arg);
  28.     sleep(3);
  29.     strcpy(message, "Bye!");
  30.     pthread_exit("Thank you for the CPU time");
  31. }
复制代码


少许修改, 就能满足楼主的要求。
作者: dragonq    时间: 2004-04-16 15:56
标题: 请问C语言中如何实现两个语句并发执行?
谢谢大家!
我查询了一下多进程编程,但我的程序比较简单,各进程相互独立,不需要相互通信,只使用了简单的fork()语句,我把代码贴出来以便有和我同样问题的参考!也希望高手能帮助看看如何可以优化!

  1. #include <stdio.h>;
  2. #include <unistd.h>;
  3. #include <sys/types.h>;
  4. #include <sys/wait.h>;
  5. void func1();
  6. void func2();
  7. void func3();
  8. int main(){
  9.     pid_t pid1, pid2, pid3;
  10.     pid1 = fork();
  11.     if(pid1 == 0){
  12.         printf("Hello from the child process!\n");
  13.         printf("The child is exiting now!\n");
  14.         func1();
  15.     }
  16.     else if( pid1 != -1 ){
  17.         printf("Hello from the parent,pid %d.\n",getpid());
  18.         printf("The parent has forked process %d.\n",pid1);
  19.         pid2 = fork();
  20.         if( pid2 == 0 ) func2();
  21.         else if( pid2 != -1 ){
  22.             printf("The parent has forked process %d.\n",pid2);
  23.             pid3 = fork();
  24.             if( pid3 ==0 ) func3();
  25.             else if(pid3 != -1){
  26.                 printf("The parent has forked process %d.\n",pid3);
  27.                 waitpid(-1, NULL, 0);
  28.                 printf("The parent is exiting now.\n");
  29.             }
  30.             else{
  31.                 printf("There was an error with forking pid3!\n");
  32.             }
  33.         }
  34.         else{
  35.             printf("There was an error with forking pid2!\n");
  36.         }
  37.     }
  38.     else{
  39.         printf("There was an error with forking pid1!\n");
  40.     }
  41. }
  42. void func1(){
  43.     printf("I'm func1.\n");
  44.     sleep(15);
  45. }
  46. void func2(){
  47.     printf("I'm func2.\n");
  48.     sleep(15);
  49. }
  50. void func3(){
  51.     printf("I'm func3.\n");
  52.     sleep(15);
  53. }
复制代码

作者: zhujunsoft    时间: 2004-04-16 18:38
标题: 请问C语言中如何实现两个语句并发执行?
用多进程,多线程,分布式都可以,上面都有了,哈哈
作者: mirnshi    时间: 2004-04-16 23:55
标题: 请问C语言中如何实现两个语句并发执行?
fork应该说实现最简单




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2