`
ai_longyu
  • 浏览: 481023 次
社区版块
存档分类
最新评论

多进程和多线程编程

阅读更多

1、多进程编程

  1. #include<stdlib.h>
  2. #include<sys/types.h>
  3. #include<unistd.h>
  4. intmain()
  5. {
  6. pid_tchild_pid;
  7. /*创建一个子进程*/
  8. child_pid=fork();
  9. if(child_pid==0)
  10. {
  11. printf("childpid\n");
  12. exit(0);
  13. }
  14. else
  15. {
  16. printf("fatherpid\n");
  17. sleep(60);
  18. }
  19. return0;
  20. }


2、多线程编程

  1. #include<stdio.h>
  2. #include<pthread.h>
  3. structchar_print_params
  4. {
  5. charcharacter;
  6. intcount;
  7. };
  8. void*char_print(void*parameters)
  9. {
  10. structchar_print_params*p=(structchar_print_params*)parameters;
  11. inti;
  12. for(i=0;i<p->count;i++)
  13. {
  14. fputc(p->character,stderr);
  15. }
  16. returnNULL;
  17. }
  18. intmain()
  19. {
  20. pthread_tthread1_id;
  21. pthread_tthread2_id;
  22. structchar_print_paramsthread1_args;
  23. structchar_print_paramsthread2_args;
  24. thread1_args.character='x';
  25. thread1_args.count=3000;
  26. pthread_create(&thread1_id,NULL,&char_print,&thread1_args);
  27. thread2_args.character='o';
  28. thread2_args.count=2000;
  29. pthread_create(&thread2_id,NULL,&char_print,&thread2_args);
  30. pthread_join(thread1_id,NULL);
  31. pthread_join(thread2_id,NULL);
  32. return0;
  33. }


3、线程同步与互斥

1)、互斥

  1. pthread_mutex_tmutex;
  2. pthread_mutex_init(&mutex,NULL);
  3. /*也可以用下面的方式初始化*/
  4. pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;
  5. pthread_mutex_lock(&mutex);
  6. /*互斥*/
  7. thread_flag=value;
  8. pthread_mutex_unlock(&mutex);


2)、条件变量

  1. intthread_flag=0;
  2. pthread_mutex_tmutex;
  3. pthread_cond_tthread_flag_cv;\
  4. voidinit_flag()
  5. {
  6. pthread_mutex_init(&mutex,NULL);
  7. pthread_cond_init(&thread_flag_cv,NULL);
  8. thread_flag=0;
  9. }
  10. void*thread_function(void*thread_flag)
  11. {
  12. while(1)
  13. {
  14. pthread_mutex_lock(&mutex);
  15. while(thread_flag!=0)
  16. {
  17. pthread_cond_wait(&thread_flag_cv,&mutex);
  18. }
  19. pthread_mutex_unlock(&mutex);
  20. do_work();
  21. }
  22. returnNULL;
  23. }
  24. voidset_thread_flag(intflag_value)
  25. {
  26. pthread_mutex_lock(&mutex);
  27. thread_flag=flag_value;
  28. pthread_cond_signal(&thread_flag_cv);
  29. pthread_mutex_unlock(&mutex);
  30. }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics